誰かが役に立つと思った場合に投稿します。
当初意図していたことを正確に実行しようとする代わりに、次のことを思いつきました。
1- を使用します2- ユーザーが項目をContextMenuStrip
クリックすると、以下に示すように、メニュー項目の近くの場所に が表示されます: (配置にはまだ調整が必要であることに注意してください)ToolStripMenu
ContextMenuStrip
これを機能ContextMenuStrip
させるために、実行時にコード内をビルドContextMenuStrip
して、状況に応じて動的にアイテムをビルドできるようにします。
コード スニペット:
ContextMenuStrip
メニュー項目がクリックされたときに表示:
private void filterToolStripMenuItem_Click(object sender, EventArgs e)
{
contextMenuStrip1.Show(this, 180, 20);
}
以下を構築しContextMenuStrip
ます。
if (protInfo.Name == "QCOM" )
{
BroadCast = new CheckBox();
BroadCast.Text = "Date/Time Broadcast";
BroadCast.Checked = FlagSet(CurrentFilter, (Byte)Filter.DateTimeBC);
ToolStripControlHost Ch1 = new ToolStripControlHost(BroadCast);
GenPoll = new CheckBox();
GenPoll.Text = "Status Poll";
GenPoll.Checked = FlagSet(CurrentFilter, (Byte)Filter.GenStatusPoll);
ToolStripControlHost Ch2 = new ToolStripControlHost(GenPoll);
GenPollResp = new CheckBox();
GenPollResp.Text = "Status Poll Response";
GenPollResp.Checked = FlagSet(CurrentFilter, (Byte)Filter.GenStatusResponse);
ToolStripControlHost Ch3 = new ToolStripControlHost(GenPollResp);
Button btnDone = new Button();
btnDone.Text = "Done";
ToolStripControlHost Ch4 = new ToolStripControlHost(btnDone);
btnDone.Click += new EventHandler(btnDone_Click);
contextMenuStrip1.Items.Clear();
contextMenuStrip1.Items.Add(Ch1);
contextMenuStrip1.Items.Add(Ch2);
contextMenuStrip1.Items.Add(Ch3);
contextMenuStrip1.Items.Add(Ch4);
contextMenuStrip1.Enabled = true;
filterToolStripMenuItem.Enabled = true;
}
else
{
filterToolStripMenuItem.Enabled = false;
}
これは最適なユーザー インターフェイス デザインではないかもしれませんが、機能しているようです。