【发布时间】:2013-08-29 00:18:39
【问题描述】:
我制作了一个自定义数字键盘控件,我想将它放在我的 winform 应用程序中。所有按钮都有一个OnClick 事件,用于向我放置自定义控件的表单中的焦点文本框发送一个值。像这样:
private void btnNum1_Click(object sender, EventArgs e)
{
if (focusedCtrl != null && focusedCtrl is TextBox)
{
focusedCtrl.Focus();
SendKeys.Send("1");
}
}
focusedCtrl 应该设置在按钮的MouseDown 事件上,如下所示:
private void btnNum1_MouseDown(object sender, EventArgs e)
{
focusedCtrl = this.ActiveControl;
}
其中this.ActiveControl 表示窗体上的活动控件。
我的问题是按钮总是在事件检测到以前的焦点控件之前获得焦点。如何在按钮获得焦点之前检测哪个控件获得焦点?我应该使用另一个事件吗?提前致谢!
编辑:另外,我宁愿不使用表单中每个文本框上的 GotFocus 事件来设置 focusedCtrl,因为这可能很乏味,而且我希望拥有自定义控件的所有编码在控件本身中,而不是在放置它的窗体上。 (不过,如果没有其他实用的方法可以满足我的要求,我会这样做)
【问题讨论】:
-
如果您不跟踪焦点,您将无法在按钮上获得最后一个焦点控件
Clicking。跟踪焦点需要我们处理与focus相关的事件之一,例如Enter, Leave, GotFocus, LostFocus。
标签: c# winforms events button focus