私は奇妙な問題を抱えています...私は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();
}
}
加えて、私はテキストが無効である場合は、[OK]ボタンを無効にチェックをしてもらいたいです。このチェックは、テキストボックスのTextChangedハンドラ、およびフォームのShowハンドラに行われます。 – smead
これはWebページで最も一般的なより良いアプローチです。 @ ArtR45はこれを覚えています。 –
ありがとう...私は通常、メッセージボックスを持っています...しかし、私はこれを最初に設定したときに、手動で設定するのではなく、プロパティ 'DialogResult'を使用していました。いずれにしても今は素晴らしい作品です。再度、感謝します。簡単な質問ですが、「OKボタンのアイデアを無効にする」のが好きです。コードスニペットを提供できますか?私は、テキストボックス1_TextChangedイベントで 'true'をフォームをロードするときに 'false'にしようとしましたが、何も起こりません。 – ArtR45