1

TextBoxがあります。textBoxを離れた後、最初の文字は大文字にする必要があります。3つのイベントは同じように機能します。それらは、Leave、Validating、およびValidatedです。

if (txtLocl.Text.Length > 0)
    txtLocl.Text = txtLocl.Text.Substring(0, 1).ToUpper() + txtLocl.Text.Substring(1); 

これら3つのイベントのうち、どのイベントを使用する必要がありますか?

4

5 に答える 5

3

Control.Leaveコントロールがフォーカスを失ったときに発生するイベントをサブスクライブできます。もともと、使用するのが最も適切なイベントだと思ってControl.LostFocusいましたが、デザイナーからは利用できません。つまり、少し醜くて型破りなイベントを手動でサブスクライブする必要があります。

private void inputTextBox_Leave(object sender, EventArgs e)
{
    if (inputTextBox.Text != string.Empty)
    {
        string input = inputTextBox.Text;
        inputTextBox.Text = input.First().ToString(CultureInfo.InvariantCulture).ToUpper() +
                            string.Join(string.Empty, input.Skip(1));
    }
}

あなたはあなたが興味を持っているように聞こえますControl.Validating。を使用する利点はControl.Validating、イベントハンドラーの指定された引数を利用できることです。プロパティをtrueCancelEventArgsに設定します。Cancelこれにより、コントロールがフォーカスを失い、ユーザーに有効な値の入力を強制するのを防ぐことができます。入力をフォーマットする以外に何も検証していないため、これはアプリケーションには適切ではないと思います。

private void inputTextBox_Validating(object sender, CancelEventArgs e)
{
    if (inputTextBox.Text == string.Empty)
    {
        statusLabel.Text = "The given input is not valid.";
        e.Cancel = true;
    }
}

フォームが閉じると、その後すべてのコントロールがフォーカスを失い、Control.Validatingイベントが発生して、すべてのフィールドが相対的な検証チェックに合格するまでフォームの閉じを停止する可能性があることに注意してください。この動作を回避する必要がある場合は、クイック検索が優先されます。

于 2013-03-11T11:18:11.357 に答える
2

他にもたくさんのイベントがあります。

MSDNが述べているように、キーボード(TAB、SHIFT + TABなど)を使用するか、SelectメソッドまたはSelectNextControlメソッドを呼び出すか、ContainerControl.ActiveControlプロパティを現在のフォームに設定することによってフォーカスを変更すると、フォーカスイベントが発生します。次の順序で:

1) Enter

2) GotFocus

3) Leave

4) Validating

5) Validated

6) LostFocus

マウスを使用するか、Focusメソッドを呼び出してフォーカスを変更すると、フォーカスイベントは次の順序で発生します。

1) Enter

2) GotFocus

3) LostFocus

4) Leave

5) Validating

6) Validated

CausesValidationプロパティがfalseに設定されている場合、ValidatingイベントとValidatedイベントは抑制されます。

于 2013-07-20T10:15:54.360 に答える
0

LostKeyboardFocusイベント(WPFの場合)またはLeaveイベント(WFの場合)をサブスクライブすることをお勧めします。

于 2013-03-11T11:06:46.747 に答える
0

textBox1_Leaveはあなたに適しています。

ここでテキストボックスに関するイベントと説明を確認してください>>

http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox_events.aspx

お役に立てば幸いです。

于 2013-03-11T11:05:28.787 に答える
0

値を検証しているのではなく、フォーマットしていると想定しているため、Leaveを使用することをお勧めします。ValidatingとValidatedには、それぞれ検証用のコードと検証の余波、IMOが含まれている必要があります。

于 2013-03-11T11:16:57.110 に答える