【发布时间】:2018-07-25 05:37:39
【问题描述】:
让我从示例开始:
我有一个 Form 和一个名为 "btnTest" 的按钮,并为它添加了 _click 事件。
private void btnTest_Click(object sender, EventArgs e)
{
MessageBox.Show("button click");
}
现在我想使用Control 类为这个button 动态生成另一个_click 事件,因此覆盖现有的event_hendler,所以我的表单看起来像这样:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control[] controls = Controls.Find("btnTest", true); //find control by name
controls[0].Click += Form1_Click; //generate button click
}
private void Form1_Click(object sender, EventArgs e)
{
MessageBox.Show("control click"); //want to be displayed
}
private void btnTest_Click(object sender, EventArgs e)
{
MessageBox.Show("button click"); //don't want to be displayed
}
}
所以我的目标是启用 Form1_Click 并忽略 btnTest_Click 并在代码中动态执行此操作。
完成someresearch,但无法得到答案。
我为什么要这样做?
我的主要目标是使用 ENTER 关键字而不是 TAB 来浏览控件,所以当我偶然发现按钮时,我只想在不触发原始事件的情况下继续前进。
请注意,btnTest_Click 事件是在 Form1_Click 事件之前触发的,而且不好的解决方案是直接在btnTest_Click 中执行某些操作,因为我想使用 ENTER导航的控件数量有限> 并且帽子是可变的,所以我想忽略的按钮将在 controls 数组中。
任何建议都有帮助,感谢您的宝贵时间。
【问题讨论】:
-
我会尝试取消按钮上的 13 on keydown 事件,因此单击只会在您点击空格或用鼠标单击或点击时触发。因为您肯定不想让按钮完全无法点击。
-
这是一个 XY 问题。您设置了一个奇怪的解决方案来解决实际上不需要任何启用和禁用这些功能的问题,只需小心调用。相当肯定你需要去 KeyDown 这个。
-
@dlatikay 谢谢你的建议,你是对的,不想让按钮无法点击
-
@MarkBenningfield 谢谢,但它不是重复的,因为我不是从一开始就构建导航,我只是在修复已经编写的代码中的现有问题