3

少し問題があります。ログインフォームであるフォームがあります。次に、別のフォームもあります。これは、ユーザーの追加フォームです。ログインフォームのログインボタンをクリックすると、ShiftキーとCtrlキーの両方が同時に押されているかどうかを確認する必要があります。両方が押されていない場合、ユーザーの追加フォームは開かないはずです。ただし、両方を押してログインボタンをクリックすると、フォームが表示されます。

私が持っているもの:

if (Control.ModifierKeys == (Keys.Control & Keys.Shift))
{
    //Show the form
}

しかし、これは機能していません。

私が持っているとき:

if (Control.ModifierKeys == Keys.Shift)
{
    //Show the form
}

その後、それは動作します。

両方のボタンを押して、制御し、シフトすることで、これをどのように達成できますか?

4

2 に答える 2

11

試してみてくださいKeys.Control | Keys.Shift


これはフラグの列挙です。各値は、基になるの個別のビットで表されますint

Keys.Control & Keys.Shift結果はゼロ値になります。たとえば、Controlis0001Shiftis0010の場合、ビット単位&0000です。

Control.ModifierKeys0000ユーザーが修飾キーを押していない場合にのみ、ユーザーが何も押していない場合==にのみ結果が得られます。true

Keys.Control | Keys.Shift一方、は、「これらのフラグの両方」という値になります。たとえば、Controlis0001Shiftis0010の場合、ビット単位|0011です。

Control.ModifierKeysユーザーが0011両方CtrlShift押したままにしている場合にのみ、のようになります。そのため、この場合に==のみ結果が得られます。true


または、これを次のように分類することもできます

bool ctrlIsHeldDown  = (Control.ModifierKeys & Keys.Control) == Keys.Control;
bool shiftIsHeldDown = (Control.ModifierKeys & Keys.Shift)   == Keys.Shift;
if (CtrlIsHeldDown && shiftIsHeldDown)
{
    ...
}

コンストラクトは(value & x) == x、個々のフラグxが設定されているかどうかをチェックし、その後はjsut標準ブール論理になります。

于 2013-01-18T12:13:00.780 に答える
3

あなたはこれを行うことができます :

if (Control.ModifierKeys == (Keys.Control | Keys.Shift))
{
    //Show the form
}

この助けを願っています。

于 2013-01-18T12:14:44.753 に答える