UserControl中TextBox设置Focus失效的问题2

还是获取焦点的问题,不过这次不同。
这次是Form中有SplitContainer,左边有TreeView,点击TreeView节点后,在SplitContainer右边加不同的UserControl。加载完UserControl之后,UserControl中的TextBox自动获取焦点。

按照上一篇的做法,运行看不到效果。分析了一下原因,应该是点击了TreeView的某个节点后,焦点还在TreeView内,虽然代码中控制了UserControl的TextBox获得焦点,但实际上UserControl的TextBox没获得焦点,依然无效。找了TreeView的API,也没发现有什么方法,可以让TreeView失去焦点。

于是,头脑风暴,换了种写法。
首先定义一个委托。
delegate void ShowChangeCouponFocus(ChangeCoupon ctl);
ShowChangeCouponFocus ShowChangeCouponFun;
private void FunShowChangeCouponFocus(ChangeCoupon ctl)
{
   ctl.Capture = true;
   ctl.SetBacodeFocus();
}

其中,ChangeCoupon为自定义的UserControl。ctl.SetBacodeFocus();为UserControl中的自定义方法,用来设置TextBox的焦点。
public void SetBacodeFocus()
{
    this.txtBarcode.Focus();
}

然后,在TreeView的AfterSelect做出如下修改
switch(e.Node.Name)
{
    case "NodeChangeCoupon":
         var ctlChangeCoupon = ChangeCoupon() { Dock = DockStyle.Fill };
         this.panelCategory.Controls.Clear();
         this.panelCategory.Controls.Add(ctlChangeCoupon);
         
         ShowChangeCouponFun = new ShowChangeCouponFocus(FunShowChangeCouponFocus);
         this.BeginInvoke(ShowChangeCouponFun, ctlChangeCoupon);
         break;    
    //.....其他内容
}

仅仅将设置焦点的代码放到了BeginInvoke中执行,在点击TreeView之后,自定义UserControl加载后,TextBox自动获得焦点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于TextBoxUserControl示例: 首先,我们需要创建一个新的UserControl。在Visual Studio,选择“项目”菜单,然后选择“添加新项”,在“添加新项”对话框选择“用户控件”模板,然后命名您的用户控件并单击“添加”按钮。 在用户控件的设计器,将一个TextBox拖放到您的用户控件上。然后,打开用户控件的代码视图,并添加以下代码: ```csharp public partial class MyTextBox : UserControl { public MyTextBox() { InitializeComponent(); } public string TextValue { get { return textBox1.Text; } set { textBox1.Text = value; } } public int MaxLengthValue { get { return textBox1.MaxLength; } set { textBox1.MaxLength = value; } } public bool ReadOnlyValue { get { return textBox1.ReadOnly; } set { textBox1.ReadOnly = value; } } } ``` 在这个示例,我们添加了三个公共属性,使用户能够访问TextBox的Text、MaxLength和ReadOnly属性。此外,我们还在构造函数调用了InitializeComponent方法,这是由Visual Studio自动生成的方法,用于初始化用户控件的设计器。 现在,我们需要在设计器打开MyTextBox的属性面板,并将其Dock属性设置为“Fill”,以便使TextBox填充整个用户控件。 最后,我们可以在窗体设计器使用MyTextBox控件。在Visual Studio打开您的窗体设计器,然后将MyTextBox拖放到您的窗体上。您可以使用属性面板设置MyTextBox的属性,就像设置普通TextBox一样。 这样,我们就创建了一个基于TextBoxUserControl,让用户可以方便地使用它来输入文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值