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メソッドを使用したいと思います。しかし、それがパブリックスタティックでない限り、私はそれを行うことはできません。ただし、Connect()をパブリックスタティックに変更する場合、その中のすべてのコントロールはスタティックである必要があります。私は自分が持っている静的コントロールの量を最小限に抑えようとしています。誰かが再試行方法を手伝ってもらえますか?

4

2 に答える 2

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 に答える
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 に答える