2011-01-27 7 views
0

2つのテキストボックスに値があるまで、「送信」ボタンを無効にすることを検討しています。私はこれについてどうやって行くのか完全にはわからない。txtBoxが有効になるまでボタンを無効にするC#

+5

WinForms? ASP.NET?他に何か? –

+0

WinForms(C#)はもちろんです。 –

答えて

3

これはWinFormsなので、テキストボックスのTextChangedイベントを監視し、ボタンの有効状態を更新するメソッドを呼び出す必要があります(ここではstring.IsNullOrEmptystring.IsNullOrWhiteSpaceが役に立ちます)。

次の例は、ボタンが有効になる前にテキストボックスにコンテンツを表示する簡単な状況を示しています。

private void OnTextChanged(object sender, EventArgs args) 
{ 
    UpdateUserInterface(); 
} 

private void UpdateUserInterface() 
{ 
    this.myButton.Enabled = !string.IsNullOrWhiteSpace(this.textBox1.Text) && 
          !string.IsNullOrWhiteSpace(this.textBox2.Text); 
} 

あなたが有効な状態を決定するために、より複雑で時間がかかる何かをしたい場合は、タイピングが行われるまで、ボタンの状態の更新を遅らせる何かを検討する必要があります。たとえば、TextChangedイベントが発生し、最終的にUpdateUserInterfaceメソッドを呼び出すイベントハンドラのTickイベントハンドラで停止するたびに小さな間隔のタイマーが再起動されます。

サイドノート
これは、WinFormsのアプリケーションで学習以来、私は、この情報を狩りそれらのために、ノートを左右に以下の点に追いやられています。

WPFの場合、同様の方法を使用するか、適切なバリューコンバータを使用していくつかの狡猾なバインディングを使用できます。私はそれを簡単に保つことをお勧めしたいと思います。

ASP.NETの場合、これはJavaScriptのクライアントサイドで行うことができます - テキストボックスのイベントであるonChangeのイベントに添付し、値*の両方をテストします。その余分な情報のためOded

**ありがとうございました。*

+0

asp.netでは、これはjavascriptを使ってクライアント側で行うことができます - テキストボックスの 'onChange'イベントに付随し、両方の値をテストします。 – Oded

+0

@Oded:ありがとうございます、私はそれをカバーする答えを更新します。 –

+0

これはC#WinFormsにあります。 –

2

WinfoemsやWPFでは、単一のハンドラとの両方のTextBoxのTextChangedイベントをフック。そのハンドラでは、両方のテキストボックスの現在のテキストを見てください(深すぎると、すべてのキーストロークでイベントが発生するため、詳細な検証によってUIレスポンスが遅くなります)。テキストが空でない場合または空白のみの場合は、ボタンを有効にします。それ以外の場合は無効にします。

ASP.NETでは、JavaScriptを使用する必要があります。 DOMのテキストボックスにも同様のOnChangedイベントがあり、WinFormsと同様の仕事をするJavascript関数を割り当てることができます。 JavaScriptを無効にしてブラウザを実行できるので、サーバー側でnullをチェックして、ボタンがデフォルトで無効になっていないことを確認する必要があります(JavaScriptのみで、OnChanged関数またはドキュメントの読み込み)。

関連する問題