【发布时间】:2011-02-08 11:18:14
【问题描述】:
我有一个 GUI 应用程序,其中添加了一个按钮。在几个插件 dll 中,创建了一个新按钮,需要将其添加到 GUI 中以代替现有按钮。
有没有办法简单地说 ButtonA = ButtonB?还是我必须在运行时从 GUI 中删除按钮,然后添加新按钮?
谢谢。
【问题讨论】:
-
您可以只更改现有按钮的事件处理方法。一个按钮就是一个按钮。
我有一个 GUI 应用程序,其中添加了一个按钮。在几个插件 dll 中,创建了一个新按钮,需要将其添加到 GUI 中以代替现有按钮。
有没有办法简单地说 ButtonA = ButtonB?还是我必须在运行时从 GUI 中删除按钮,然后添加新按钮?
谢谢。
【问题讨论】:
或者您可以将其链接到另一个处理程序,例如:
您的旧 Click 事件处理程序
private void ButtonA_Click(object sender, EventArgs e)
{
//Do sth
}
您的新 Click 事件处理程序(例如,如果您创建一个新按钮)
private void ButtonB_Click(object sender, EventArgs e)
{
//Do sth
}
那么你需要删除第一个处理程序并添加你的新处理程序:
ButtonA.Click -= this.ButtonA_Click;
ButtonA.Click += new EventHandler(ButtonB_Click);
【讨论】:
You 按钮被添加到某个父级(例如表单)。这意味着您必须从 Form 的 Controls 集合中删除原始按钮,然后添加新按钮。或者,您可以替换 Controls 集合中的按钮。
假设遍历集合后,你发现按钮是第 5 个元素,你可以这样做:
this.Controls[4] = ButtonB;
我不能 100% 确定这是否意味着您必须手动使屏幕无效才能更新 GUI。在这种情况下,请致电ButtonB.Invalidate();
【讨论】:
将您感兴趣的属性从第一个按钮复制到创建的第二个按钮,然后从 Controls 集合中删除第一个按钮或将 .Visible 设置为 false。
至于事件,您会遇到问题,因为您必须手动调用旧按钮事件处理程序 - .NET 中无法读取 OnClick(或任何其他事件)订阅者。
【讨论】: