13

CTRL- AWinformsアプリケーションでテキストを選択するために使用されるときにシステムベルが鳴らないようにする方法はありますか?

これが問題です。Winforms プロジェクトを作成します。フォームにテキスト ボックスを配置し、次のイベント ハンドラーをフォームに追加して、テキスト ボックス内のすべてのテキストを選択できるようCTRLAします (どのコントロールにフォーカスがあるかに関係なく)。

void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
    {
        System.Diagnostics.Debug.WriteLine("Control and A were pressed.");
        txtContent.SelectionStart = 0;
        txtContent.SelectionLength = txtContent.Text.Length;
        txtContent.Focus();
        e.Handled = true;
    }
}

CTRL動作しますが、e.Handled = true にもかかわらず、 -Aが押されるたびにシステム ベルが鳴ります。


返信いただきありがとうございます。

フォームの KeyPreview は true に設定されています - しかし、それはシステムのベルが鳴るのを止めません - これは私が解決しようとしている問題です - 迷惑です。

4

4 に答える 4

21
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.A)
        {
            this.textBox1.SelectAll();
            e.SuppressKeyPress = true;
        }
    }

お役に立てれば

于 2009-01-29T20:01:11.173 に答える
6

MSDN フォーラムの投稿のおかげで、この問題は、テキスト ボックスが複数行モードであり、すべてを選択するためにCtrl+を実装したい場合にのみ発生します。A

これが解決策です

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
  if (keyData == (Keys.A | Keys.Control)) {
    txtContent.SelectionStart = 0;
    txtContent.SelectionLength = txtContent.Text.Length;
    txtContent.Focus();
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
于 2008-10-23T16:28:44.893 に答える
1

これは私のために働いた:

フォームのKeyPreviewをTrueに設定します。

お役に立てば幸いです。

于 2008-10-22T13:37:09.390 に答える
1

@ H7O ソリューションは優れていますが、フォーム上の TextBox コンポーネントを乗算するために少し改善しました。

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
  if (e.Control && e.KeyCode == Keys.A)
  {
    ((TextBox)sender).SelectAll();
    e.SuppressKeyPress = true;
  }
}
于 2013-10-27T23:40:28.083 に答える