如何重写c#中的Form.Show()方法

本文关键字:Form Show 方法 中的 重写 何重写 | 更新日期: 2023-09-27 17:54:30

我想重写Show()方法的形式,但c#不让我这样做。当我回到上一个窗口时,我想刷新列表框。我不想使用observable集合等

 protected override void Show() {
            base.Show();
            list.Items.Clear();
            loadListItems();
        }

'Sklep.OknoProduktow.Show()':不能重写继承的成员'System.Windows.Forms.Control.Show()',因为没有标记虚的、抽象的或覆盖的

如何重写c#中的Form.Show()方法

您不能覆盖Show方法,但可以对其进行阴影处理。将这段代码放入表单的类中:

public new void Show()
{
     //your code here
     //call the shadowed Show method on our form.       
     base.Show();
}

您需要区分事件方法。如果事件未声明为虚,则不可能重写事件。表单。显示的事件不是虚拟的,也不受保护。

在Winforms中有另一种机制可以覆盖事件处理。每个事件Xxxx都有一个对应的保护方法OnXxxx。OnXxxx()方法的职责是触发Xxxx事件,最终由基类中的实现来处理。在本例中是由form . onshow ().

这样做的价值是你有额外的选择在你想要覆盖事件的默认处理方式:

  • 你可以先调用base. onshow(),然后做任何你想自定义的事件。这使您可以覆盖自定义事件处理程序可能完成的任何操作。在OnPaint事件处理程序中很常见,例如当你想要确保你所绘制的内容位于所绘制的基类或事件处理程序的顶部时。
  • 您可以编写自定义代码,然后调用base. onshowed()。实现相反的目标,自定义事件处理程序可以覆盖您所做的任何操作。这是正常的方式。
  • 您可以编写自定义代码,而不是调用base. onshowed()。这将阻止事件处理程序运行。很少这样做,但是当您的自定义非常广泛,以至于客户端代码的事件处理程序可能会发生故障时,您想要做出选择。
  • 你可以写你的自定义代码,而不是调用base. onshowed(),但仍然触发显示事件。这也很少见,但如果基本实现妨碍了你,你就必须这样做。

所以你的方法最有可能正确的实现是:

    protected override void OnShown(EventArgs e) {
        loadListItems();
        //Call the original OnShown.
        base.OnShown(e);
    }

使用第二个项目符号,允许事件处理程序自定义您加载的列表。

尽量不要混淆更大的问题,你这样做是错误的。该列表应该在表单构造函数中初始化。

为什么不使用from activated event?

它会帮助你的。表单激活后,列表框将刷新。

我认为你不能覆盖show(),这就是为什么它没有解决你的问题。

private void Form1_Activated(object sender, System.EventArgs e)
{
  list.Items.Clear();
  loadListItems();
}