0

奇妙な問題が発生しています... 2 つのフォーム (Form1 と Form2) があります。Form1 は古い名前 (文字列) で呼び出し、ユーザーは Form1 に返される Form2 に新しい名前 (textbox1) を入力します。値を入力するかキャンセルすると、すべて正常に機能します...ただし、特に値を入力することを保証するためにエラーチェックを入れたいと思います。エラーチェックは問題なく動作しますが、エラー後、正しい値を入力するとform2は閉じますが何も起こりません。いくつかのブレークポイントを設定すると、Form1 は using(form2 ...) ステートメントを保持しているように見え、Form2 が終了するのを待っていますが、エラー メッセージが表示された後は何も起こりません。... Form2 F2 = new Form2 ... Form2 を削除すると、閉じて Fomr1 に戻ります。理想的には、値が入力されるかユーザーがキャンセルするまで Form2 にとどまりたいと思います。私は何が欠けていますか?

// Form1 
using(Form2 F5 = new Form2(SelNm))
{
    if(F5.ShowDialog()== DialogResult.OK)
    {
        //Do stuff
    }
}

// Form2
public string newName { get; set; }
public string oldName { get; set; }

public Form2(string oldNm)
{
    InitializeComponent();
    oldName = oldNm;      
}

private void btnOK_Click(object sender, EventArgs e)
{
    if (textbox1.Text.Length > 0)
    {
        newName = textbox1.Text;
        DialogResult = DialogResult.OK;
        Close();
    }
    else
    {
        MessageBox.Show("ERROR: Must enter a new name.");
        DialogResult = DialogResult.Cancel;
        Form2 f2 = new Form2(oldName);
        f2.Show();
        Close();
    }
}
4

1 に答える 1

2

これは、エラー ダイアログが表示された後に新しい Form2 を呼び出したためです。これは、Form1 が待機している Form2 のインスタンスではありません。新しい Form2 を呼び出す代わりに、現在の Form2 を再利用してみませんか?

これの代わりに:

    MessageBox.Show("ERROR: Must enter a new name.");
    DialogResult = DialogResult.Cancel;
    Form2 f2 = new Form2(oldName);
    f2.Show();
    Close();

なぜこれではないのですか?

    MessageBox.Show("ERROR: Must enter a new name.");
    // Do not close the form so the user can
    // input again

アップデート:

コメントで提案されているように..

private void textbox1_TextChanged(object sender, RoutedEventArgs e)
{
    btnOK.Enabled = !string.IsNullOrWhiteSpace(textbox1.Text);
}
于 2016-04-15T00:19:24.753 に答える