ghostlyt 发表于 2015-12-16 19:58:00

GcNumber表示文字的问题

版本:InputMan for Winforms 7.0J
控件:GcNumber
现象:

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

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

有没有办法解决此问题?

Leo 发表于 2015-12-17 09:57:00

回复 1楼ghostlyt的帖子

你的怀疑是正确的。
解决方案是你在抢Focus给别人的时候,反射调用一下NotifyLeave
      void gcNumber1_Enter(object sender, EventArgs e)
      {
            GcNumber gcNumber = sender as GcNumber;
            if (gcNumber != null)
            {
                MethodInfo mi = gcNumber.GetType().GetMethod("NotifyLeave", BindingFlags.Instance | BindingFlags.NonPublic);
                if (mi != null)
                {
                  mi.Invoke(gcNumber, null);
                }                  
            }
            this.textBox1.Select();
      }
    }

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

回复 4楼Leo的帖子

懂了:|

Alice 发表于 2015-12-21 09:29:00

回复 5楼ghostlyt的帖子

谢谢反馈。
页: [1]
查看完整版本: GcNumber表示文字的问题