0

私は現在、C# ビジュアル スタジオ Windows アプリケーションに取り組んでいます。あるフォーム (Form1) からテキスト ボックスの値を取得し、次のフォーム (Form2) で使用するために変数に格納するのに問題があります。値をすぐに表示したくないため、値をバックグラウンドで保存して後で使用できる方法が必要です。どうすればできますか?

私はこの方法を試しましたが、うまくいきません。誰か教えてください。form2 の戻り値は空白です。

Login.cs (ログイン ページ)

    public string uname;

    private void LoginButton_Click(object sender, EventArgs e)
    {
        string userName = this.LoginUsernameTextBox.Text;
        uname = userName;
    }

Form2.cs

    private void CheckLoginUsername_Click(object sender, EventArgs e)
    {
    Login login = new Login();
    MessageBox.Show("The value of uname is:" + login.uname);
    }

ここに画像の説明を入力

4

1 に答える 1

2

問題は、ユーザーが操作しているForm2のと同じインスタンスを参照していないLoginことです。新しいインスタンスを作成し (ユーザーに表示することはありません)、そこから値を取得しています。

これらのフォーム間の相互作用の範囲を示していません (もしあるとすれば、かなりの量を見落としています)。

おそらく次のようになります。

Form2 の場合:

private void Form1_Load(object sender, EventArgs e)
{
    Login loginForm = new Login ();

    loginForm.ShowDialog();

    string username = loginForm.UserName;
}

次に、ログインフォームは次のようになります。

public string UserName { get; private set; }

これにより、値を内部的に設定し(フォームが送信/閉じられたとき)、外部から読み取ることができます。

フィールドを public にすることはお粗末だと考えられています。代わりにプロパティを使用することをお勧めします (これにより、とりわけ、ここで行ったことを実行して、setter を非公開に制限することができます)。

于 2012-12-10T19:13:46.153 に答える