2017-04-17 10 views
-1

Form1にテキストボックスがあります。 Form1呼び出しクラス1、クラス1呼び出しクラス2。 Form1を変数として渡さずにclass2からTextboxを設定する方法。テキストボックスのテキストを、パスフォームを変数として使用しない別のクラスに変更しますか?

+1

これを実行しようとしたコードを表示しますか? – TriV

+0

'Form1'だけがテキストボックスにアクセスできるはずです。これを達成するためのさまざまな方法があります。厳密なシナリオに応じて、新しいテキストが設定可能になった時点で発生したイベントを 'class2'が公開するのが最善の方法の1つです。次に、Form1はイベントに登録してテキスト自体を取り出すことができます。このイベントを 'class1'に反映させる必要があるかもしれません。再び、正確なシナリオに依存します(実際には何の文脈も提供していません)。イベントベースのアプローチがどのように機能するかの例については、[my answer here](http://stackoverflow.com/a/29872737)を参照してください。 –

答えて

0

あなたの質問は見苦しいですが、ここではdelegateのシナリオを達成するためのアプローチの1つですが、参考にしてください。

// FORM1 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Class1 cls1 = new Class1(); 
     cls1.textChange += Cls1_textChange; ; 
     cls1.YourFunctionInClass1(); 
    } 

    private void Cls1_textChange(string str) 
    { 
     textBox1.Text = str; 
    } 
} 

// CLASS1 
public class Class1 
{ 
    internal delegate void TextChangeDelegate(string str); 
    internal event TextChangeDelegate textChange; 

    public void YourFunctionInClass1() 
    { 
    Class2 cls2 = new Class2(); 
    cls2.textChange += Cls2_textChange; 
    cls2.YourFunctionInClass2(); 
    } 

    private void Cls2_textChange(string str) 
    { 
    textChange(str); 
    } 
} 

// CLASS2 
public class Class2 
{ 
    internal delegate void TextChangeDelegate(string str); 
    internal event TextChangeDelegate textChange; 

    public void YourFunctionInClass2() 
    { 
    textChange("Hello I am from Class2"); 
    } 
} 
+0

多くのありがとう、それは私が探しているものです – JimmyN

関連する問題