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自动获得焦点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值