我在VB.net 2013中有一个Winform项目。 在表格上我有很多控件。 如果条件为真,我需要在特定表单区域内进行所有控件,而不是可点击(但不禁用它们) 当然,当条件变为假时,该区域应该恢复到正常状态。 谢谢!
答案 0 :(得分:1)
您可以为每个控件分配NativeWindow
并截取HITTEST
消息。
E.g。此示例仅适用于直接Form's
个孩子。你也可以通过所有的孩子来解决问题。
Form f = new Form();
f.Controls.Add(new Button { Text = "test test test "});
Form f2 = new Form();
CheckBox cb = new CheckBox { Text = "Toggle" };
f2.Controls.Add(cb);
List<NW> nws = null;
cb.CheckedChanged += delegate {
if (nws == null) {
nws = new List<NW>();
foreach (Control c in f.Controls) {
nws.Add(new NW(c.Handle));
}
}
else {
foreach (var nw in nws)
nw.ReleaseHandle();
nws = null;
}
};
f.Show();
Application.Run(f2);
class NW : NativeWindow {
public NW(IntPtr hwnd) {
AssignHandle(hwnd);
}
const int WM_NCHITTEST = 0x84;
protected override void WndProc(ref Message m) {
if (m.Msg == WM_NCHITTEST)
return;
base.WndProc(ref m);
}
}
答案 1 :(得分:0)
将所有控件放在PANEL
中,然后禁用该面板。
panel.Enabled = false;