2

ContextMenuStripを持つDataGridViewがあります。ContextMenuStrip のデフォルトの動作は自動終了です。つまり、ユーザーが操作するとすぐに閉じます。複数のユーザーとの対話を許可するためにこれをオフにしましたが(これは私が望んでいることです)、実際に必要なのは、ユーザーがそれ以外の場所をクリックするとコンテキストメニューが閉じられることです。

ユーザーがクリックするスペースは、フォーム上に直接あるか、子コントロール (または子の子など) にある可能性があります。それでも、「クリックアウェイ」イベントをきちんとキャプチャして、ContextMenuStrip を閉じようとしています。

どんなアイデアでも大歓迎です。

タミム。

4

3 に答える 3

7

LostFocusContextMenuStripのイベントで閉じるだけです。

AutoCloseプロパティをtrueに戻し、イベントを処理します。ToolStripDropDownClosedEventArgsのCloseReasonプロパティがItemClickedと等しい場合にのみ、クローズをキャンセルします。Closing

于 2009-10-08T17:21:41.460 に答える
0

この SO questionでこれらの人が行ったことに従うことができます。これによりUIがちらつくかどうかはわかりませんが、やりたいことができるかもしれません。

于 2009-10-08T17:07:48.633 に答える
0

一般的に言えば、私は標準コントロールの非標準動作を思いとどまらせます...したがって、これは本当に境界線です。UI をリファクタリングして、メニュー項目の 1 つを選択した後、コンテキスト メニューが自動的に閉じることを期待するユーザーにとってより直感的になる方法をおそらく探します。

この状況で、たとえば、グリッド内の行のプロパティを変更する場合、コンテキスト メニューから開く [プロパティ] (モーダル) ダイアログ ボックスを使用できます。または、Visual Studio の [プロパティ] ウィンドウのようなものを実装し、選択コンテ​​キストに応じてそれ自体を更新します。これらのソリューションはどちらも柔軟性が高く、単純なコンテキスト メニューよりも優れたフィードバックをユーザーに提供します。

于 2009-10-08T17:35:15.397 に答える