ContextMenuStripをToolStripButtonに追加するにはどうすればよいですか?
-
08-07-2019 - |
質問
ToolStripComboBoxとToolStripButtonを含むツールストリップがあります。両方にContextMenuStripを追加したいのですが、ツールストリップやその他のコンテンツに直接アクセスできないため、ツールストリップのコンテキストメニューを設定できません。
ToolStripComboBoxのContextMenuStripの設定は簡単です:
myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;
ただし、ToolStripButtonに相当するものはありません。 ContextMenuStripをToolStripButtonに追加するにはどうすればよいですか?
解決
Jeff Yatesが提案したことは、うまくいくはずです。
ただし、別の代替方法は、独自の派生クラス(MyToolSTripButton、MyToolStripTextBoxなど)を作成して、これらのアイテムに設計時に設定できるContextMenuStripプロパティを与え、派生クラスに右マウスダウンなどを検出させることです。その他のイベントは、コンテキストメニューの表示をトリガーします。
これにより、関心のあるアイテムのみに必要な知識がオフロードされます。
以下は、ToolStripTextBoxをアイテムとして使用する例です。
public class MyTextBox : ToolStripTextBox
{
ContextMenuStrip _contextMenuStrip;
public ContextMenuStrip ContextMenuStrip
{
get { return _contextMenuStrip; }
set { _contextMenuStrip = value; }
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if (_contextMenuStrip !=null)
_contextMenuStrip.Show(Parent.PointToScreen(e.Location));
}
}
}
他のヒント
コンテキストメニューをToolStripに設定し、コンテキストメニューまたは関連イベントのポップアップを処理して、マウスがどのボタンにあるかをテストして、ToolStripのコンテキストメニューを表示する必要があるかどうかを決定する必要があります含む。
これは、ToolStripComboBoxに" System.Windows.Forms.ComboBox"が含まれているためです。コントロール、ただし" ToolStripButton" " System.Windows.Forms.Control"が含まれていません。ボタンである特別なツールストリップアイテムは、ツールチップによって維持されます。
ツールチップでContextMenuを使用するか、ツールストリップボタン項目にドロップダウンを追加できます。
良い質問です。親の toolstrip
( myToolStripButton.Parent
または同様のもの)にアクセスし、そこにコンテキストメニューを添付できる場合があります。