0

9つのチェックボックスが入った小さなフォームがあります。テンキーに対応するボックスのホットキーを作成しようとしていますが、最悪の時間を過ごしています。私には2つの主な問題があります:

1.1。

 private void checkBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.NumPad7)
        {
            MessageBox.Show("It's working");

        }
    }

それが私のコードです。それは動作しますが、私が望むことをしません。メッセージが表示されますが、そのチェックボックスが強調表示されている場合に限ります。KeyPreviewはこのコンテキストで役立つと思いますが、MSDNデータベースは、KeyPreviewを機能させる方法を理解しようとする私の問題を解決するのに役立ちませんでした。

次に、ホットキーを押したときにコードでチェックボックスをオンにします。CheckStateを使用して計算できる組み合わせは機能しないようです。誰かが何らかの刺激を持っているなら、私はそれを大いに感謝します。


コメントからのコード:

public Form2() 
{ 
    InitializeComponent(); 
    this.KeyPreview = true; 
    this.KeyDown += new KeyEventHandler(Form2_KeyDown);
} 

private void Form2_KeyDown(object sender, KeyEventArgs e) 
{ 
    switch (e.KeyCode) 
    { 
        case Keys.NumPad7: 
            MessageBox.Show("ABC"); 
            break; 

        default: 
            break; 
    } 
} 
4

3 に答える 3

1

あなたの質問は、これをアプリケーション固有のホットキーにするか、システムホットキーにするかについては述べていません。アプリケーション固有のものを想定して運用しています。あなたは、FormsKeyPreviewプロパティをtrueに設定する必要があるというあなたの仮定に正しかった。次に、次のように、FormsKeydownイベントでチェックボックスを設定およびクリアするためのコードを配置する必要があります。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode )
    {
        case Keys.NumPad1:
            if (checkBox1.Checked)
                checkBox1.Checked = false;
            else
                checkBox1.Checked = true;

            break;
        case Keys.NumPad2:
            if (checkBox2.Checked)
                checkBox2.Checked = false;
            else
                checkBox2.Checked = true;

            break;
        case Keys.NumPad3:
            if (checkBox3.Checked)
                checkBox3.Checked = false;
            else
                checkBox3.Checked = true;

            break;
        case Keys.NumPad4:
            if (checkBox4.Checked)
                checkBox4.Checked = false;
            else
                checkBox4.Checked = true;

            break;
        case Keys.NumPad5:
            if (checkBox5.Checked)
                checkBox5.Checked = false;
            else
                checkBox5.Checked = true;

            break;
        case Keys.NumPad6:
            if (checkBox6.Checked)
                checkBox6.Checked = false;
            else
                checkBox6.Checked = true;

            break;
        case Keys.NumPad7:
            if (checkBox7.Checked)
                checkBox7.Checked = false;
            else
                checkBox7.Checked = true;

            break;
        case Keys.NumPad8:
            if (checkBox8.Checked)
                checkBox8.Checked = false;
            else
                checkBox8.Checked = true;

            break;
        case Keys.NumPad9:
            if (checkBox9.Checked)
                checkBox9.Checked = false;
            else
                checkBox9.Checked = true;

            break;
        default:
            break;
        }
    }

次に、CheckedChangedイベントに共通のEventHandlerを作成し、対応するメソッドを実行するために選択されたチェックボックスを確認できます。

void checkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox cb = (CheckBox)sender;

    switch(cb.Name)
    {
        case "checkBox1":
            if (cb.Checked)
                // Method to use when checkBox1 is checked
            else
                // Method to use when checkBox1 is unchecked


            break;

        case "checkBox2":
            if (cb.Checked)
                // Method to use when checkBox2 is checked
            else
                // Method to use when checkBox2 is unchecked

            break;

        case "checkBox3":
            if (cb.Checked)
                // Method to use when checkBox3 is checked
            else
                // Method to use when checkBox3 is unchecked

            break;

        default:
            break;

        //Implement your other checkBox's the same way.
        }

    }
于 2013-03-18T02:04:16.763 に答える
1

これで、ALTで有効にしたい文字の前にアンパサンドを追加するだけで済みます。詳細情報:

https://docs.microsoft.com/en-us/dotnet/desktop/winforms/controls/how-to-create-access-keys?view=netdesktop-5.0

于 2021-04-13T02:15:28.967 に答える
0

すべてのチェックボックスのイベントに同じイベントハンドラーを割り当てます。

_checkbox1.KeyDown += checkBox_KeyDown;
_checkbox2.KeyDown += checkBox_KeyDown;

// And so on...

次に、その中のチェックを行います。

private void checkBox_KeyDown(object sender, KeyEventArgs e)
{
    var checkbox = sender as CheckBox;
    if (checkbox == null) { return; }

    if (e.KeyCode == Keys.NumPad1)
    {
        _checkbox1.IsChecked = !_checkbox1.IsChecked;
        return;
    }

    if (e.KeyCode == Keys.NumPad2)
    {
        _checkbox2.IsChecked = !_checkbox2.IsChecked;
        return;
    }

    // And so on...
}
于 2013-03-17T23:11:52.640 に答える