私はContextMenuStrip
2つのsでセットアップしていますToolStripItem
。2 番目ToolStripItem
には、ネストされた が 2 つ追加されていToolStripItem
ます。私はこれを次のように定義します。
ContextMenuStrip cms = new ContextMenuStrip();
ToolStripMenuItem contextJumpTo = new ToolStripMenuItem();
ToolStripMenuItem contextJumpToHeatmap = new ToolStripMenuItem();
ToolStripMenuItem contextJumpToHeatmapStart = new ToolStripMenuItem();
ToolStripMenuItem contextJumpToHeatmapLast = new ToolStripMenuItem();
cms.Items.AddRange(new ToolStripItem[] { contextJumpTo,
contextJumpToHeatmap});
cms.Size = new System.Drawing.Size(176, 148);
contextJumpTo.Size = new System.Drawing.Size(175, 22);
contextJumpTo.Text = "Jump To (No Heatmapping)";
contextJumpToHeatmap.Size = new System.Drawing.Size(175, 22);
contextJumpToHeatmap.Text = "Jump To (With Heatmapping)";
contextJumpToHeatmap.DropDownItems.AddRange(new ToolStripItem[] { contextJumpToHeatmapStart,
contextJumpToHeatmapLast });
contextJumpToHeatmapStart.Size = new System.Drawing.Size(165, 22);
contextJumpToHeatmapStart.Text = "From Start of File";
contextJumpToHeatmapLast.Size = new System.Drawing.Size(165, 22);
contextJumpToHeatmapLast.Text = "From Last Data Point";
ToolStripMenuItem
次に、応答する3 つの のクリック イベントのイベント リスナーをセットアップします。方法は次のとおりです (3 つの方法のうち 2 つだけをリストしました)。
void contextJumpTo_Click(object sender, EventArgs e)
{
// Try to cast the sender to a ToolStripItem
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
if (menuItem != null)
{
// Retrieve the ContextMenuStrip that owns this ToolStripItem
ContextMenuStrip owner = menuItem.Owner as ContextMenuStrip;
if (owner != null)
{
// Get the control that is displaying this context menu
DataGridView dgv = owner.SourceControl as DataGridView;
if (dgv != null)
// DO WORK
}
}
}
void contextJumpToHeatmapStart_Click(object sender, EventArgs e)
{
// Try to cast the sender to a ToolStripItem
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
if (menuItem != null)
{
// Retrieve the ToolStripItem that owns this ToolStripItem
ToolStripMenuItem ownerItem = menuItem.OwnerItem as ToolStripMenuItem;
if (ownerItem != null)
{
// Retrieve the ContextMenuStrip that owns this ToolStripItem
ContextMenuStrip owner = ownerItem.Owner as ContextMenuStrip;
if (owner != null)
{
// Get the control that is displaying this context menu
DataGridView dgv = owner.SourceControl as DataGridView;
if (dgv != null)
// DO WORK
}
}
}
}
これが私が抱えている問題です:
私のcontextJumpTo_Click
方法は完全にうまくいきます。どのDataGridView
クリックが発生したかを特定するところまでたどり着き、先に進むことができます。ただし、 はのcontextJumpTo
ToolStripMenuItem
ネストされたメニュー項目ではありませんContextMenuStrip
。
しかし、私の方法はcontextJumpToHeatmapStart_Click
正しく機能しません。私が決定する行に降りるとowner.SourceControl
、SourceControl
は null であり、先に進むことができません。ToolStripMenuItem
これで、これが my の別の 1 つの下にネストされていることがわかりましContextMenuStrip
たが、なぜ my のSourceControl
プロパティが突然 null になるのContextMenuStrip
でしょうか?
SourceControl
ネストされた for aToolStripMenuItem
を取得するにはどうすればよいContextMenuStrip
ですか?