我有一个面板,其中有几个文本框,我想通过文本框的值来决定是否启用按钮(也在面板内)。面板是否注册了一个预定义的事件来捕获内部文本框onTextChange事件?谢了,舒琪
t3irkdon1#
我只需要设置一个通用的TextBox_TextChanged事件处理程序来调用我的Validate方法,然后将每个TextBox链接到它,这可以通过一个循环来完成。可能类似于(未测试):
TextBox_TextChanged
Validate
TextBox
foreach (Control ctrl in container.Controls) { if (ctrl is TextBox) { ((TextBox)ctrl).TextChanged += new System.EventHandler(TextBox_TextChanged); } }
zed5wv102#
不幸的是,你必须自己做(订阅文本框上的事件)。
jqjz2hbq3#
不,没有(AFAIK)。但是你可以让你所有的文本框在事件发生时调用同一个方法。如果你想动态添加文本框,你可以注册ControlAdded事件,然后在那里注册新添加的文本框。
yhqotfr84#
与HTML DOM不同,WinForms中的事件不会传播到包含元素,因此您必须自己侦听所有事件。
pdtvr36n5#
某些Windows控件在其值被修改时向其父控件发送EN_CHANGE消息。通过重写父WndProc方法,可以检测子控件(文本框或组合框)何时更改。例如:
protected override void WndProc(ref Message m) { if (m.Msg == WinUser.WM_COMMAND) { int wNotCode = HIWORD(wParam); if (wNotCode == WinUser.CBN_SELCHANGE || wNotCode == WinUser.EN_CHANGE) { // Child field has changed } } base.WndProc(ref m); }
注意:这只适用于子控件。如果你想在根控件中处理EN_CHANGE通知,你必须向上传播WM_COMMAND消息。
5条答案
按热度按时间t3irkdon1#
我只需要设置一个通用的
TextBox_TextChanged
事件处理程序来调用我的Validate
方法,然后将每个TextBox
链接到它,这可以通过一个循环来完成。可能类似于(未测试):
zed5wv102#
不幸的是,你必须自己做(订阅文本框上的事件)。
jqjz2hbq3#
不,没有(AFAIK)。但是你可以让你所有的文本框在事件发生时调用同一个方法。如果你想动态添加文本框,你可以注册ControlAdded事件,然后在那里注册新添加的文本框。
yhqotfr84#
与HTML DOM不同,WinForms中的事件不会传播到包含元素,因此您必须自己侦听所有事件。
pdtvr36n5#
某些Windows控件在其值被修改时向其父控件发送EN_CHANGE消息。
通过重写父WndProc方法,可以检测子控件(文本框或组合框)何时更改。例如:
注意:这只适用于子控件。如果你想在根控件中处理EN_CHANGE通知,你必须向上传播WM_COMMAND消息。