2016-08-25 4 views
0

からメインウィンドウの子として第二のフォームを開くたぶん私は必要に応じて変更し、タイトルに自分自身を明確にすることはありません。今、私は説明をステップ:WPF + Windowsフォーム、最初のフォーム

私はWPF(原因グラフィックス)で行われたプログラムを持っています。 MainWindowはボタン付きの最初のFormを開き、Form1はMainWindowのUIを変更し、Form2を開いてMainWindowのUIを変更する必要があるはずですが、 Form1からForm2を開きます。

MainWindow.xaml.cs

internal static MainWindow main; //It allows me to put the Form1 in the same context in order to change the UI 
private void start_button_Click(object sender, RoutedEventArgs e) 
{ 
    Form1 frm = new Form1(this); 
    frm.Show(); 
} 

のForm1.cs

//function that allow me to communicate with the MainWindow 
private MainWindow main1 = null; 

public Form1(MainWindow callingForm) 
{ 
    main1 = callingForm as MainWindow; 
    InitializeComponent(); 
} 

//Load function 
private void Form1_Load(object sender, EventArgs e) 
{ 
    //do some stuff changing MainWindow UI 
    Form2 frm = new Form2(main1); //no compilation error 
    frm.Show(); 
} 

さて、Form2のは開けません:

はここにいくつかのコードです。私はまた、MainWindowにあるForm1で何もない空白を呼び出そうとしました。私がしなければならないこと?注記:Form2でメインウィンドウのUIを変更する必要があり、Form2がForm1の計算の最後にのみ開くようにする必要があります。あなたがメインウィンドウからウィンドウを開こうとしている場合は

+0

'Form'とはどのような名前空間ですか?それはWinFormsのためのもののように見える? –

+0

名前空間 "Application__WPF" @lll – Northumber

+0

'Dispatcher'で' Form2'の関数呼び出しをラップすることはできますか?このようなディスパッチャとDispatcher.BeginInvoke' –

答えて

0
public Form1(MainWindow callingForm) 
    { 
     main1 = callingForm as MainWindow; 
     InitializeComponent(); 
     this.Load += Form1_Load; 
    } 
+0

を@lll動作しません '、それは自動的に – Northumber

0

、私はあなたが窓をインスタンス化するためにeventsを使用することをお勧めします。

構造の観点から、子供の頃から、親に言うようにちょっと変わっています。「ねえ、あなたはこのフォームを開いて欲しいです。」それでもそれを作成して表示するのはForm1です。

私はこのようなものだろう:

メインウィンドウ:

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

    private void start_button_Click(object sender, RoutedEventArgs e) 
    { 
     Form1 frm = new Form1(); 
     frm.MyEvent += Form1EventMethod; 
     frm.Show(); 
    } 

    private void Form1EventMethod(object sender, EventArgs e) 
    { 
     // You can add here what you need to change in the MainWindow. 

     Form2 frm = new Form2(); 
     frm.Show(); 
    } 
} 

をForm1:また

public partial class Form1 : Window 
{ 
    public event EventHandler MyEvent; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void show_form_Click(object sender, EventArgs e) 
    { 
     if(MyEvent != null) 
      MyEvent(this, new EventArgs()); 
    } 
} 

この方法、あなただけのメインウィンドウの場合よりも多くを購読することをこのイベントが発生したときに何かしたいと思っています。また、異なるパラメータを購読者に渡すこともできます。あなたの意見は分かれていて、互いに依存しているわけではありません。

+0

惜しい、良い説明けど:(Form2のは表示されません動作していないがロードなど – Northumber

関連する問題