2012-01-12 15 views
0

私はForm1(親)を持ち、elementHost(WPF usercontrol)を持っています。今、WPFのusercontrolが親から関数を呼び出すか、値/データを渡したいと思います。そのような単純な。親(winForm)から関数を呼び出す子(wpf usercontrol)

これは私が使用しているが、プログラムは常にクラッシュしたコード..です

をForm1:

public void samp() 
{ 
MessageBox.Show("Sample"); 
} 

WPFユーザーコントロール:

Form1 frm1 = new Form1(); 

public void test() 
{ 
frm1.samp(); 
} 

はそれが可能です子供が親に直接アクセスできるようにするには?

+0

「プログラムは常にクラッシュしていますか?あなたはどんなエラーを出していますか? –

+0

いいえ、実行されません。私はVSを再起動する必要があります。そして、それは常にタスクマネージャー(プロセス)で800,000K +を与えます –

+0

あなたが説明したように問題を再現しようとしました:[これを参照してください](http://dl.dropbox.com/u/3169795/StackOverflow/WpfApplication_Japs%20Asuncion.zip)それは私のために働くようです。たぶんあなたはどこかであなたのソリューションをアップロードできますか? –

答えて

4

このプログラムできません! Wpf usercontrolで新しいForm1を作成します。 Form1にはこのusercontrolが含まれています...これは無限ループです!

あなたはこのように、あなたはあなたの関数を呼び出すことができ、Form1にあなたのWPFユーザーコントロールをホストするelementhostのParentプロパティをキャストする必要があります。

HwndSource wpfHandle = PresentationSource.FromVisual(this) as HwndSource; 
if (wpfHandle != null) 
{ 
    ElementHost host = System.Windows.Forms.Control.FromChildHandle(wpfHandle.Handle) as ElementHost; 
    if (host != null) 
    { 
     Form1 form1 = host.Parent as Form1; 
     if (form1 != null) 
     { 
      form1.samp(); 
     } 
    } 
} 
+0

どうすればいいですか? –

+0

Form1のインスタンス化がどこで行われるかによって異なります。それがWPF UserControl(ElementHost.Child)のコンストラクタにある場合は、それはinfinteです(Form1の作成時に新しいWPF USerControlが作成されるなど)。 (OnClick)がForm1を作成し、パブリックメソッドを呼び出すWPF UserControl上のボタンを持つとき、私は問題を参照しません... –

+0

それは無限ループではありません。 'void test()'が初期化中に呼び出されるが、そうでない場合は無限ループになります。 –

0

あなたのWPFコントロールに親のインスタンスをenjectする必要があります。その後、その参照を持つと、それを操作することができます。

関連する問題