web-dev-qa-db-ja.com

TextBoxのEnterをTABボタンとして機能させる方法

私はいくつかのテキストボックスを持っています。 EnterボタンをTabとして機能させたいのですが。そのため、あるテキストボックスにいるときにEnterキーを押すと、次のテキストボックスに移動します。テキストボックスクラス内にコードを追加せずにこのアプローチを実装する方法を教えてください(可能であればオーバーライドしないなど)?

20

これが私が普段使っているコードです。 KeyDownイベントである必要があります。

if (e.KeyData == Keys.Enter)
{
    e.SuppressKeyPress = true;
    SelectNextControl(ActiveControl, true, true, true, true);
}

[〜#〜]更新[〜#〜]

他の方法は「TAB」キーを送ることです!そして、メソッドをオーバーライドすると、それがとても簡単になります:)

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{            
    if (keyData == (Keys.Enter))
    {
        SendKeys.Send("{TAB}");
    }

    return base.ProcessCmdKey(ref msg, keyData);
}
21
Behzad

任意のコントロールのkeyDownに書き込むことができます。

        if (e.KeyCode == Keys.Enter)
        {

            if (this.GetNextControl(ActiveControl, true) != null)
            {
                e.Handled = true;
                this.GetNextControl(ActiveControl, true).Focus();

            }
        }

GetNextControlは Vista では機能しません。

Vistaで動作させるには、次のコードを使用してthis.GetNextControl ...を置き換える必要があります。

System.Windows.Forms.SendKeys.Send("{TAB}");
11

「Enterイベントハンドラ」を作成する必要はありません

あなたがする必要があるのは「中央」KeyDownイベントを作ることだけです:

private void General_KeyDown(object sender, KeyPressEventArgs e)
 {
 if (e.KeyCode == Keys.Enter)
        {

            if (this.GetNextControl(ActiveControl, true) != null)
            {
                e.Handled = true;
                this.GetNextControl(ActiveControl, true).Focus();
            }
        }
}

次に、デザイナーに行ってEnterKeyで循環させたいすべてのテキストボックスを選択し(Ctrlを押しながらマウスでテキストボックスをクリックして選択し)、イベント(ボタンのようなもの)に移動し、Keydownイベントを検索して入力します。 General_KeyDown内。これで、選択したすべてのテキストボックスに同じキーダウンイベントが発生します:)これにより、すべてが非常に簡単になり、100個のテキストボックスを持つフォームを想像して、Enterですべてを循環させたいと考えています。プログラムを作成するための適切な方法ではありません。それが役に立てば幸い!!

ブロッククォート

4
Anca

コントロールが関連付けられたボタンコントロールとe.Handled = trueは、常にノイズ/サウンド/丁を取り除くための答えではありません。

コントロール(つまり、1行のテキストボックス)が、関連付けられたボタンでエントリを「ENTER」することを期待している場合は、「欠落」しているコントロールにも対処する必要があります。

e.Handled = e.SuppressKeyPress = true;

これは、「Ding」音を取り除くときに役立ちます。

私の状況では、ターミナル/グリーンスクリーンアプリケーションからWindowsアプリに移行するときにユーザーが「Enterキー」を使用する必要があり、タブ移動ではなくフィールドを介して「Enter」することに慣れていました。 。

これらの方法はすべて機能しましたが、e.SuppressKeyPress

3
Greg

すべてのコントロールのタブオーダーを定義してForm.KeyPreview = Trueにする場合、これだけが必要です。

    Private Sub frmStart_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Enter Then
        System.Windows.Forms.SendKeys.Send("{TAB}")
    End If
End Sub
1
FXX

これは私のために働いた

if (e.Key == Key.Enter)
            ((TextBox)sender).MoveFocus(new TraversalRequest(new FocusNavigationDirection()));
1
Cadair Idris

これは私がVB.NETに使用するソリューションです

  1. フォームのプロパティでKeypreview = Trueを設定します。

  2. このコードをフォームのkeydownイベントに配置します。

    If(e.KeyData = Keys.Enter)Then

    'マルチラインコントロールの場合は、終了してマルチライン' textbox intro 'を押すと、行がスキップされます。

     If ActiveControl.Name = txtMyMutilineTextBox.Name Then Exit Sub 
    
     e.SuppressKeyPress = True
     SelectNextControl(ActiveControl, True, True, True, True)
    

    終了する場合

お楽しみください!!!!

Xabier Aberasturi Larruzea

0

あなたのそれらのためのVBのコード...

Public Class NoReturnTextBox
    Inherits System.Windows.Forms.TextBox

    Const CARRIAGE_RETURN As Char = Chr(13)

    ' Trap for return key....
    Private Sub NoReturnTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

        If e.KeyChar = CARRIAGE_RETURN Then
            e.Handled = True
            System.Windows.Forms.SendKeys.Send(vbTab)
        End If

    End Sub

End Class
0
Mac

フォームレベルでは行いません。これを実行したいすべての入力KeyDownイベントで共有する単一のメソッドを作成します(1つの例外があります)。

       private void alltextBoxes_KeyDown(object sender, KeyEventArgs e)
    {
        try
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.SuppressKeyPress = true;
                SelectNextControl(ActiveControl, true, true, true, true);                    
            }
        }
        catch
        {
        }
    }

他のアプリケーションで使用したいコントロールを作成している場合は、最後の入力に次のような独自のメソッドを指定します。

       private void lastinput_KeyDown(object sender, KeyEventArgs e)
    {
        try
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.SuppressKeyPress = true;
                System.Windows.Forms.SendKeys.Send("{TAB}");
            }
        }
        catch
        {
        }
    }

それ以外の場合は、別のプロジェクトで実行しようとしたときに、コントロールがループするだけです。 2番目の方法はどこでも使用できますが、1番目の方法をお勧めします。

0
glctig

このコードをテキストボックスのキーダウンイベントの1つで使用します

if (e.KeyData == Keys.Enter)
{
     e.SuppressKeyPress = true;
     SelectNextControl(ActiveControl, true, true, true, true);
}

フォームのすべてのテキストボックスでこのkeydownイベントを処理できません。何か提案してください。ありがとう

0
Shahrzad Saeedi