どうにかしてを入力してコンテキストメニューにアクセスしてください。明らかに、デフォルトの動作は、ユーザがを押したときに現在強調表示されている項目を「選択」することです。を入力してください。
ContextMenuStrip
コントロールをサブクラス化して(そうしていない場合)、そのProcessCmdKey
methodをオーバーライドします。値がKeys.Enter
に対応するkeyData
の値を確認し、その値を検出した場合は、True
を返して、その文字がコントロールによって既に処理されたことを示し、それ以降の処理のために渡されないようにします。他のすべてはもちろん、他のキー(矢印キーなど)の動作が変更されないように、基本クラスの処理を許可します。例えば
(私はこれをテストし、それが正常に動作します):ときにがキーの押下を入力するよう
public class CrazyContextMenuStrip : ContextMenuStrip
{
protected override bool ProcessCmdKey(ref Message m, Keys keyData)
{
if (keyData == Keys.Enter)
{
// Eat it when the user presses Enter to
// prevent the context menu from closing
return true;
}
// Let the base class handle everything else
return base.ProcessCmdKey(m, keyData);
}
}
そしてもちろん、あなたは上記のコードに追加のチェックを追加することができますのみを食べていますカラーピッカーが表示され、予定どおりに動作するようになります。
うわー、そうです。これは信じられないほど壊れやすいデザインのようです。私は間違いなく私が実際にそれを使用し終わる前にピッカーを却下しないように自分自身を信じていました、私の祖母ははるかに少なくなりました。それが価値があるかどうか、私はたくさんの*モーダルでない、浮動ツールウィンドウを好むでしょう。 –
@Cody、それは実際には驚くほどうまく動作します。ピッカーがフォーカスを受け取ったときに他のメニュー項目をロックするので、メニューを閉じるための唯一の方法は、その外側をクリックするか、EnterまたはEscapeを押すことです。 –
これにより、これはいくらか実行可能になるかもしれません。しかし、あなたはそれをどうやって管理していますか?私の答えのコメントにあなたが記述したメニューとその内容との間の分離を考えていますか?明らかに私はあなたがこれをどのように実装したのかは分かりませんが、 "ロック"機能を拡張してEnterキーの押下を抑制して抑制するという単純な問題のようです。ハッキーな解決策は、グローバルフラグを設定することです。 –