2014-11-20 39 views
-1

,从我对如何创建键盘Click here for the link无法取得KeyPressEventHandler在用户控件

的用户控件看到了现场。我成功地将控件添加到工具中。并在Form UI中拖动一个。当我开始点击数字。 RaiseButton被触发:

private void btn1_click(object sender,eventargs e) 
    { 
     RaiseButton('1'); 
    } 

和另一个用户控件。 有此方法

public event KeyPressHandler IsPressed; 

public void RaiseButton(char Tosend) 
{ 
    KeyPressEventHandler handle = IsPressed; 
    handle(this,new KeypressEventArgs(Tosend)); 
} 

的Class KeyPressHandler Ispressed值为空 因此它不能写入到文本框。现在我的问题是,我错过了什么使keypresseventhandler为空?

请指教谢谢

回答

0

我现在解决了。我在表单中使用的事件与我在用户控件中使用的事件不同,我非常愚蠢。用户控件中的public event KeyPressEventHandler IsPressed事件也必须在您的表单中使用。为了能够注册这个,在你想要使用该控件的表单上。单击用户控件并查看事件属性,或者只需单击属性中的雷霆符号即可。寻找事件IsPressed现在你的好去。双击并放置您想要为该事件执行的代码。 @wlemond谢谢你给我的例子。

干杯:)

0

因为没有被注册为它的IsPressed事件为null。一旦注册该事件,它将不再为空。首先检查事件为空。另外,您不需要将其分配给变量。

public void RaiseButton(char Tosend) 
{ 
    if (IsPressed != null) 
    { 
     IsPressed(this,txtbox.text); 
    } 
} 
+0

嗨,感谢您的快速回复,但是您什么意思没有注册?在这一行公共事件KeypressEventHandler IsPressed - 已经为null的值。我如何注册这个活动? – Androidz 2014-11-21 02:26:03

+0

和对不起,我编辑这里的句柄(this,txtbox.text)到 句柄(这个,新的KeyPresseventargs(tosend));这是在Windows控件库中。 – Androidz 2014-11-21 02:27:46

+0

看来你并不完全了解C#中的事件是如何工作的。我在这里为你创建了一个简单的例子。 https://dotnetfiddle.net/3PfsRJ 它可能会帮助您了解您需要在代码中执行的操作。另外,你可能想看到这个页面。 http://msdn.microsoft.com/en-us/library/aa645739%28v=vs.71%29.aspx 我猜你的名字是你用Java编码。 C#事件与Java如何做有点不同。 – wlemond 2014-11-22 15:58:50