我有一个有3个表单和10个用户控件的项目。每个组件都有大约10个按钮。当用户悬停时,我想使用事件来应用样式。是否有一种方法可以为通用组件创建此事件,然后将其自动应用于每个组件?因为我不一定有心情手动处理130个按钮事件^^
发布于 2018-09-20 17:28:17
最好的选择可能是子类按钮类,并在其余代码中使用该类。通过所有表单和用户定义的控件来识别事件处理程序并将其添加到每个按钮中,这将付出很大的代价(无论是在开发人员时间还是在运行时间方面)。由于按钮类不是密封的,所以可以轻松地重写OnMouseHover()方法,以便根据需要更新按钮(确保在离开覆盖之前调用基类方法)。
发布于 2018-09-20 20:28:40
您可以使用递归方法并在窗体上调用它。它将通过您的窗体的所有子控件,以及它们的子控件,如果它们是一个按钮,它将将它们链接到您的集中式方法。
下面是一个Click事件的例子,但是它可以应用于任何事情:
private void RecursiveClickSubscribe(Control c)
{
if (c is Button)
{
c.Click += GenericClickHandler;
}
foreach (Control child in c.Controls)
{
RecursiveClickSubscribe(child);
}
}
private void GenericClickHandler(object sender, EventArgs e)
{
// stuff you want to do on every click
}
Form myForm; // one of your three forms.
RecursiveClickSubscribe(MyForm);https://stackoverflow.com/questions/52430209
复制相似问题