2

私はstackoverflowで答えを見つけることができなかったので、ここに行きます. サブフォームのボタンをクリックしたときに、MenuStrip サブ項目のテキストを変更しようとしています。以下は、サブフォームの送信ボタンのコードです。クリックすると、「ログイン」のテキストが「ログアウト」に変わります。コードは正常に見え、エラーはありませんが、テキストは更新されません。

public AccessForm()
{
    InitializeComponent();
}

private void btnSubmit_Click(object sender, EventArgs e)
{
    try
    {
        if (txtUser.Text == "admin" && txtPass.Text == "1234")
        {
            MessageBox.Show("Access granted.", "Access");

            playgroundPlannersForm mainForm = new playgroundPlannersForm();

            mainForm.logInToolStripMenuItem.Text = "Log Out";
            this.Close();

        }
        else
        {
            MessageBox.Show("Incorrect Username or Password.", "Warning");
            txtUser.Clear();
            txtPass.Clear();
            txtUser.Focus();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Message: " + ex, "Error");
    }
}

private void btnCancel_Click(object sender, EventArgs e)
{
    this.Close();
}
4

1 に答える 1

1

メインフォームの新しいインスタンスを作成し、それを変更しています。元のフォームへの参照を渡し、それを使用して更新する必要があります。

これを行う1つの方法があります。サブフォームに次のプロパティを追加します。

public playgroundPlannersForm ParentForm { get; set; }

..次に、上記のコードで次を使用します。

MessageBox.Show("Access granted.", "Access");

//playgroundPlannersForm mainForm = new playgroundPlannersForm(); <--- not needed anymore

ParentForm.logInToolStripMenuItem.Text = "Log Out";

メインフォームで、サブフォームを表示する前に、次のようにします。

SubForm subform = new SubForm();
subform.ParentForm = this;
subform.Show();

これにより、親はそれを作成しているフォームに設定されます(コードによれば、これは正しいフォームです)。また、フォームデザイナコードにアクセスして、loginToolStripMenuItemを公開する必要がある場合もあります(まだ公開されていない場合)。

于 2012-11-14T00:21:56.663 に答える