1

フォーム間で変数を渡すのに少し問題があります。ボタン配列を作成しましたが、ボタンのテキストを次のフォームに渡したいと思います。しかし、これはNull値を返すだけです

最初の形式で

private string staffmem;
    public string Staffmem
    {
        get
        {
            return staffmem;
        }
    }

    public void ClickButton(Object sender, EventArgs e)
    {          
        Button btn = (Button)sender;
        staffmem = btn.Text;
        MessageBox.Show("Welcome " + staffmem);

        MainScreen ms = new MainScreen();
        ms.Show();
    }

そして2番目の形式で

        private void MainScreen_Load(object sender, EventArgs e)
    {  
        Form1 f1 = new Form1();
        staffmem = f1.Staffmem;

どんな助けでも大歓迎です。前もって感謝します

4

4 に答える 4

0

通信の両端で新しいフォームを作成しています。ボタンがクリックされたとき、およびテキストを取得するとき-これによりStaffmem、新しく作成されたオブジェクトのフィールドにアクセスできます。このフィールドは何にも設定されていないため、戻りnull値。

テキストを取得できるようにするには、作成時と同じ Form1オブジェクトが必要です。MainScreen

MainScreen ms = new MainScreen(form1);

ここform1で、は実際のオブジェクトであり、メンバー変数としてForm1格納しますMainScreen

// in MainScreen class
private Form1 f1;

Staffmem次に、格納されているメンバー変数でそのオブジェクトにアクセスします。

// in MainScreen_Load()
staffmem = f1.Staffmem;

:必要に応じてMainScreen、ボタンがクリックされるたびに新しいものを作成したくない場合もあります。その場合(MainScreen通信したいがすでに作成されている場合)、オブジェクトが作成されたときに、オブジェクトもMainScreenオブジェクトに渡す必要があります(上記のテクニックに従って)Form1Form1

于 2012-05-27T11:32:13.050 に答える
0

まったく新しいものを作成していForm1ます。ここでは、既存のインスタンスを使用します。

あなたがする必要があるのは、StaffmemあなたのMainScreenオブジェクトを定義し、それを作成した後にそれを設定することです。

MainScreen ms = new MainScreen();
ms.Staffmem = btn.Text;

次に、MainScreen_Loadで:値を設定します。

于 2012-05-27T11:32:44.623 に答える
0

2つの異なるオブジェクトを操作しています。最初に、Form1オブジェクトを作成し、ボタンをクリックすると、その1つのオブジェクトにプロパティ値が設定されますが、メイン画面でForm1の新しいインスタンスを作成します。

MainScreen自体への参照としてフォームオブジェクトを渡すことができます。

MainScreen ms = new MainScreen(this);
ms.Show();

次に、MainScreenクラスで、コンストラクターをに更新します。

public MainScreen(Form1 form)
{
    this.form1 = form;
}

そして、そのように、参照をフィールドに保持します。

private Form1 form1;

この後、これをもう一度行うことができます。

private void MainScreen_Load(object sender, EventArgs e)
{  
    staffmem = form1.Staffmem;
}
于 2012-05-27T11:33:11.623 に答える
0

あなたは何も渡していない、あなたは新しいフォームを作成している

Form1 f1 = new Form1(); 
staffmem = f1.Staffmem; 

データを共有する場合-文字列を静的にするのは本当に悪い方法です

private static string staffmem;
于 2012-05-27T11:31:16.203 に答える