2016-04-15 6 views
0

私は奇妙な問題を抱えています...私は2つのフォーム(Form1 & Form2)を持っています。 Form1は古い名前(文字列)で呼び出し、ユーザーはForm1に返されるForm2に新しい名前(textbox1)を入力します。彼らは値を入力したり取り消したりするとすべてうまく動作します...しかし、私はエラーチェックをして、値を入力するようにしたいと思います。エラーチェックはうまく動作しますが、エラーの後に正しい値が入力されると、form2は終了しますが何も起こりません。 私はいくつかのブレークポイントを入れ、Form1はForm2が終了するのを待っていますが、(form2 ...)ステートメントを使用しているようですが、エラーメッセージを表示しても何も起こりません。 削除した場合Form2 F2 =新しいForm2 ... Form2が閉じてFomr1に戻ります。理想的には、値が入力されるか、ユーザーがキャンセルするまでForm2にとどまりたいと思います。 私は何が欠けていますか?エラーチェック付きのDialogResult

// 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(); 
    } 
} 

答えて

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); 
} 
+0

加えて、私はテキストが無効である場合は、[OK]ボタンを無効にチェックをしてもらいたいです。このチェックは、テキストボックスのTextChangedハンドラ、およびフォームのShowハ​​ンドラに行われます。 – smead

+0

これはWebページで最も一般的なより良いアプローチです。 @ ArtR45はこれを覚えています。 –

+0

ありがとう...私は通常、メッセージボックスを持っています...しかし、私はこれを最初に設定したときに、手動で設定するのではなく、プロパティ 'DialogResult'を使用していました。いずれにしても今は素晴らしい作品です。再度、感謝します。簡単な質問ですが、「OKボタンのアイデアを無効にする」のが好きです。コードスニペットを提供できますか?私は、テキストボックス1_TextChangedイベントで 'true'をフォームをロードするときに 'false'にしようとしましたが、何も起こりません。 – ArtR45

関連する問題