CSkin博客

标题: LayeredListBox自定义添加DuiTextBox集合BUG [打印本页]

作者: Decline    时间: 2019-11-13 00:26
标题: LayeredListBox自定义添加DuiTextBox集合BUG
新建一个组件继承自LayeredListBox,在Dui虚拟控件中添加多个DuiTextBox,在显示后获取的光标有问题,求解决办法,效果图如下:

在你依次选择不同文本框进行文本输入时,之前获取到焦点的文本框不会失去焦点,在填写信息时会同步更新之前所有获取过焦点的文本框,代码如下


public partial class UTextDui : LayeredListBox
    {
        public UTextDui()
        {

        }


        public void addControls()
        {
            for (int i = 0; i < 10; i++)
            {
                DuiBaseControl baseComtrol = new DuiBaseControl();
                baseComtrol.Size = new Size(Width, 30);
                baseComtrol.BackColor = Color.Transparent;
                baseComtrol.Name = "baseControl_"+i.ToString();
                int zWidth = (this.Width - 20) / 3;
                for (int j = 0; j < 3; j++)
                {
                    DuiTextBox textBox = new DuiTextBox();
                    textBox.Size = new Size(zWidth,26);
                    textBox.Location = new Point(5*(j+1)+zWidth*j,2);
                    textBox.Name = "Text_" + i.ToString() + "_" + j.ToString();
                    textBox.Text = "Text_" + i.ToString() + "_" + j.ToString();
                    textBox.BackColor = Color.White;
                    textBox.BorderRender = new LayeredSkin.DirectUI.FilletBorderRender(15, 1, Color.Blue);
                    baseComtrol.Controls.Add(textBox);
                }
                Items.Add(baseComtrol);
                RefreshList();
                GC.Collect();               
            }
        }
    }


代码生成控件添加到窗体上,调用控件的addControl方法即可显示所有文本框,复现问题

作者: Decline    时间: 2019-11-14 13:34
折中的解决方案,在TextBox获取到光标之后通过委托向父窗体传递一个事件,在该事件中将鼠标光标转至其他控件上,之后再将光标移动到该TextBox上,需要进行下逻辑判断,在光标未离开该事件时触发委托事件,委托事件中需要判断下该状态,所有操作需要在TextBox获取到焦点时触发,没获取到焦点不触发该操作即可




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2