6

最初にコントロールキー(左側)を押してからマウスの左ボタンをクリックすると、次のコードが実行されるのはなぜですか。私は既存のコードを変更していますが、以下のコードはすでにあります。コントロールキーを押したまま、マウスを左クリックしただけで使用されたことがあり、その場合は常に機能しているので、これまで誰も試したことがないと思います。しかし、コントロールキーが押されると同時にマウスの左キーが押されたときに別のコードを実行したいと思います。

private void treeList1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    TreeList tree = sender as TreeList;

    if (e.Button == MouseButtons.Right && ModifierKeys == Keys.None && tree.State == TreeListState.Regular)
    {
       //the code that is here gets executed 
       MessageBox.Show("I am here");
    }
}

ヒントや助けをいただければ幸いです。

PS上記の場合、e.buttonの値を調べると、マウスの左ボタンとCtrlキーを押しても、右に等しいことがわかります。それは私には謎です。

StackOverflowの仲間の皆様へ:MACでVMを使用しているため、仮想マシンの設定でいくつかのキーマッピングを無効にする必要があり、元のコードが機能するようになったため、問題が見つかりました。ご協力ありがとうございます。

4

2 に答える 2

10

Keys.Noneの値は0であるため、単独で使用した場合に「キーが押されていない」ことを検出するのは困難です。これ:

    void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && (ModifierKeys & Keys.None) == Keys.None)
        {
            MessageBox.Show("No key was held down.");
        }
    }

左ボタンでクリックが発生する限り、キーの組み合わせが何であれ、メッセージボックスが表示されます。

ただし、これは次のとおりです。

    void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && (ModifierKeys & Keys.Control) == Keys.Control)
        {
            MessageBox.Show("Control key was held down.");
        }
    }

Controlキーが押されたとき(およびマウスの左ボタンがクリックされたとき)にのみメッセージボックスが表示されます。

条件を逆にしてControl、クリック時にキーが押されたことを検出してみてください(キーが押されていないときを検出するのではなく)。そうは言っても、同じコードを使用するのに、Keys.ControlKeyまたはKeys.LControlKey何らかの理由で動作させるのに苦労しているので、左側のコントロールキーを分離するにはもう少し調査が必要です。

于 2013-02-19T00:29:58.340 に答える
0

問題は、MACとWindows仮想マシンの間に無効にする必要のあるキーマッピングがあったことでした。すべての助けをありがとう

于 2013-02-19T16:06:10.237 に答える