我有一个GUI应用程序,它添加了一个按钮。在几个插件dll中,创建了一个新按钮,需要将其添加到GUI中以代替现有按钮。
有没有办法简单地说ButtonA = ButtonB?或者我是否必须在运行时从GUI中删除该按钮,然后添加新按钮?
感谢。
答案 0 :(得分:3)
或者您可以将其链接到另一个处理程序,例如:
旧的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);
答案 1 :(得分:1)
您的按钮被添加到某个父级(例如,表单)。这意味着您必须从Form的Controls集合中删除原始按钮,然后添加新按钮。或者,您可以替换Controls集合中的按钮。
让我们说在遍历集合之后,你会发现按钮是第5个元素,你可以这样做:
this.Controls[4] = ButtonB;
如果这意味着您必须手动使屏幕无效以更新GUI,我不能100%确定。在这种情况下,请致电ButtonB.Invalidate();
答案 2 :(得分:0)
将您感兴趣的属性从第一个按钮复制到创建的第二个按钮,然后从Controls集合中删除第一个按钮或将.Visible设置为false。
至于事件,你会遇到问题,因为你必须手动调用旧的按钮事件处理程序 - 在.NET中无法读取OnClick(或任何其他事件)订阅者。