1

我在一个窗口中有一个按钮,它基本上通过一些代码重新运行(重试按钮)

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void btnRetry_Click(object sender, RoutedEventArgs e)
    {
        //TODO retry function
        //MainWindow.Connect();
    }

    private void btnCancel_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
}

我基本上想在我的主窗口类中使用连接方法。但是,除非它是公共静态的,否则我不能这样做。但是,如果我确实将 Connect() 更改为公共静态,则其中的所有控件都必须是静态的。我正在尽量减少我拥有的静态控件的数量;有人可以帮忙重试方法吗?

4

2 回答 2

0

首先,您确实需要将方法公开(或内部),以便Window1可以使用该方法。但是,不要让它成为静态的。

MainWindow相反,在构造函数中接受一个 的实例Window1,并将其存储起来,以便Connect()稍后调用它的方法。

例如:

public partial class Window1 : Window
{
    private MainWindow mainWindow;

    public Window1(MainWindow mainWindow)
    {
        if (mainWindow == null) {
            throw new ArgumentNullException("mainWindow");
        }

        this.mainWindow = mainWindow;

        InitializeComponent();
    }

    private void btnRetry_Click(object sender, RoutedEventArgs e)
    {
        mainWindow.Connect();
    }

    // ...
}

然后,如果从内部构造实例,请将构造MainWindow函数调用从 更改new Window1()new Window1(this)

于 2012-11-19T15:58:40.980 回答
0

另一种解决方案是使Window1.btnRetry父表单可见

public MainWindow : Window
{
      private void ShowWindow1()
      {
          var window1 = new Window1();
          window1.btnRetry.Click += OnRetryClicked;
          window1.ShowDialog();
      }

      private void OnRetryClicked(object sender, EventArgs e)
      {
         // will be called when window1.btnRetry is clicked.
         // retry the connection.
         Connect();
      }
}
于 2012-11-19T16:31:30.657 回答