找回密码
 立即注册

QQ登录

只需一步,快速开始

ghostlyt

初级会员

18

主题

76

帖子

214

积分

初级会员

积分
214

活字格认证微信认证勋章

ghostlyt
初级会员   /  发表于:2015-12-16 19:58  /   查看:7389  /  回复:5
版本:InputMan for Winforms 7.0J
控件:GcNumber
现象:

GcNumber的输入格式设为####0,表示格式设为#####
这样当该控件的Text为0时,获得光标表示出【0】,失去光标后表示为空。

但是,如果在该控件的Enter事件中将光标迁到了别的控件上,这时候该控件就会残留一个【0】。
怀疑是由于没有走控件的Leave事件,导致内部仍然认为是得到焦点的状态,所以按输入时的格式来表示了。

有没有办法解决此问题?

5 个回复

倒序浏览
Leo
超级版主   /  发表于:2015-12-17 09:57:00
沙发
回复 1楼ghostlyt的帖子

你的怀疑是正确的。
解决方案是你在抢Focus给别人的时候,反射调用一下NotifyLeave
  1.         void gcNumber1_Enter(object sender, EventArgs e)
  2.         {
  3.             GcNumber gcNumber = sender as GcNumber;
  4.             if (gcNumber != null)
  5.             {
  6.                 MethodInfo mi = gcNumber.GetType().GetMethod("NotifyLeave", BindingFlags.Instance | BindingFlags.NonPublic);
  7.                 if (mi != null)
  8.                 {
  9.                     mi.Invoke(gcNumber, null);
  10.                 }                  
  11.             }
  12.             this.textBox1.Select();
  13.         }
  14.     }
复制代码

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

回复 使用道具 举报
ghostlyt
初级会员   /  发表于:2015-12-17 19:26:00
板凳
回复 2楼Leo的帖子

OK,这样确实解决问题了。

不过NotifyLeave是私有方法,继承类也只能反射调用。
调用NotifyLeave跟调用OnLeave方法有什么区别?
回复 使用道具 举报
Leo
超级版主   /  发表于:2015-12-18 10:47:00
地板
回复 3楼ghostlyt的帖子

非常严肃的告诉你,没有区别。
如果你是继承类,直接Call一下OnLeave即可。
回复 使用道具 举报
ghostlyt
初级会员   /  发表于:2015-12-18 21:05:00
5#
回复 4楼Leo的帖子

懂了:|
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-21 09:29:00
6#
回复 5楼ghostlyt的帖子

谢谢反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部