0

フォームにいくつかのコントロールがあるので、フォームでイベントを読み取って作成します。これを押すENTERと、フォーカスを別のコントロールに変更できます。コードは次のとおりです。

private void frSeleccionEL_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            Control nextControl = this.GetNextControl(ActiveControl, !e.Shift);
            if (nextControl != null)
            {
                e.Handled = true;
                if (!(nextControl is Label))
                {
                    nextControl.Focus();
                }
                else //the next control is currently a label
                {
                    nextControl = this.GetNextControl(ActiveControl, true);
                    while (nextControl != null)
                    {
                        nextControl.Focus();
                        if (!(nextControl is Label))
                        {
                            break;
                        }
                        nextControl = this.GetNextControl(ActiveControl, true);
                    }
                }
            }
        }
    }

機能していないテキストボックスには、数字のみのコードがあります。コードは次のとおりです。

private void txtLocal_KeyPress(object sender, KeyPressEventArgs e)
    {
        //Para obligar a que sólo se introduzcan números
        if (Char.IsDigit(e.KeyChar))
        {
            e.Handled = false;
        }
        else
        {
            if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso
            {
                e.Handled = false;
            }
            else
            {
                //el resto de teclas pulsadas se desactivan
                e.Handled = true;
            }
        }      
    }

私の問題は、このコントロールのキープレスイベントが発生しないため、ENTERこのコントロールを押しても何も起こらないことです。ENTER

コントロールを削除して作り直しましたが、問題は残ります。

何が悪いのかわかりません。

4

5 に答える 5

1

最初のコードが長すぎるため、必要ありません。SelectNextControlフォームのメソッドを使用して、Enter キーを押してタブ スイッチに変換する場合。txtLocal_KeyPressタブを切り替えても何もしないことがわかります。e.Handledキー押下イベントを抑制するかどうかのみに役立ちます。私はあなたTextBoxが持っているMultiline = true;と思います.Enterキーを押したくない場合は、代わりに次のコントロールに切り替えます。そうでない場合はTextBoxMultiline=false. この短いコードは次のことに役立ちます。

private void txtLocal_KeyPress(object sender, KeyPressEventArgs e){
    if(e.KeyChar == 13)//Enter{
        e.Handled = true;
        SelectNextControl(txtLocal, true, true, true, true);
    }
}

問題を解決するのはこれだけです。イベント ハンドラーを TextBox.KeyPress イベントに登録する方法を知っているかどうかわからないのでKeyPress、その場合に役立つようにここに追加します。

txtLocal.KeyPress += txtLocal_KeyPress;
于 2013-06-26T01:59:15.423 に答える
0

データバインディングを更新したいが、コントロールにとどまりたいと仮定して、Enterキーで変更をコミットしたい場合は、次のコードを使用できます

private void TextBox_KeyPress(object sender, EventArgs e)
{
   if(e.KeyCode == (char)Keys.Enter)
   {
      TextBox.DataBindings[0].WriteValue();
      dataBindingSource.ResetCurrentItem();
      TextBox.Select(TextBox.Text.Length, 0);
      e.Handled = true;
   }
}

重要な部分は、databind イベントが発生する前に変更をコミットする WriteValue() です。変更をコミットした後に他のコントロールをフォームで更新する場合は、ResetCurrentItem() がこれを行います。また、このコードは最初のバインディング値をコミットするだけですが、複数のバインディングがある場合は、foreach ループと WriteValue() を使用してそれらすべてをステップ実行できます。TextBox.Select() 行は、Enter キーを押した後にカーソルを置いたままにします。

于 2015-02-12T14:57:03.997 に答える
0

このコードをフォーム キー ダウンで使用してください。これにより、パフォーマンスが向上します。

private void frSeleccionEL_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Enter)
    {
       ProcessTabKey(true);
     }
}

すべてのコントロールにタブ インデックスが設定されていることを確認してください。

そして、テキストを変更せずにイベントコードを変更しました。フォーム全体にこのコードを記述する代わりに、カスタム テキスト ボックスを使用する方がよいでしょう。

于 2013-06-25T16:25:30.390 に答える
0

これを試して:

 private void txtLocal_KeyPress(object sender, KeyPressEventArgs e)
    {
        //Para obligar a que sólo se introduzcan números
        if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar) )
        {
            e.Handled = true;
        }
    }
于 2013-06-25T16:21:26.963 に答える
0

これを試して ......

private void txtLocal_KeyPress(object sender, KeyPressEventArgs e)
    {
        //Para obligar a que sólo se introduzcan números
        if (Char.IsDigit(e.KeyChar) || asc(e.KeyChar)==13)
        {
            e.Handled = false;
        }
        else
        {
            if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso
            {
                e.Handled = false;
            }
            else
            {
                //el resto de teclas pulsadas se desactivan                
                e.Handled = true;

            }
        }      
    }
于 2013-06-25T16:50:19.410 に答える