我想覆盖表单的Show()
方法,但是c#不允许我这样做。当我回到上一个窗口时,我想要刷新列表框。我不想使用可观察的集合等。
protected override void Show() {
base.Show();
list.Items.Clear();
loadListItems();
}
'Sklep.OknoProduktow.Show()':无法覆盖继承的成员 'System.Windows.Forms.Control.Show()'因为它没有标记 虚拟,抽象或覆盖
答案 0 :(得分:11)
您需要区分事件和方法。如果事件未声明为虚拟,则无法覆盖事件。 Form.Shown事件不是虚拟的,也不受保护。
还有另一种机制可以覆盖Winforms中的事件处理。每个事件Xxxx都有一个名为OnXxxx的相应受保护方法。 OnXxxx()方法的职责是触发Xxxx事件,最终由基类中的实现来处理。在这种情况下,Form.OnShown()。
以这种方式执行此操作的价值在于,您希望覆盖事件的默认处理方式有其他选项:
因此,最有可能正确实施的方法是:
protected override void OnShown(EventArgs e) {
loadListItems();
//Call the original OnShown.
base.OnShown(e);
}
使用第二个项目符号,允许事件处理程序自定义您加载的列表。
尽量不要混淆更大的问题,你做错了。该列表应该在表单构造函数中初始化。
答案 1 :(得分:10)
您无法覆盖Show方法,但可以隐藏它。将此代码放在表单的类中:
public new void Show()
{
//your code here
//call the shadowed Show method on our form.
base.Show();
}
答案 2 :(得分:4)
为什么不使用激活事件?
它会帮助你。激活表单后,列表框将刷新。
我认为您无法覆盖show()
,这就是为什么它无法解决您的问题。
private void Form1_Activated(object sender, System.EventArgs e)
{
list.Items.Clear();
loadListItems();
}