0

より多くのコントロールにシングルをContextMenuStrip接続しています。

Openingイベントを使用して、ContextMenuStrip一部のコンテキスト エントリをフィルタリング/無効にします。この場合、プロパティContexteMenuStrip.SourceControlは正しく設定されています。

私が抱えている問題は、の Click イベントにありToolStripMenuItemます。このアイテムは の中にありToolStripDropDownます。

私はコードで親アイテムを取得します:

Dim tsmi As ToolStripMenuItem = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ToolStripDropDown).OwnerItem, ToolStripMenuItem)

次に、ContextMenuStrip を取得します。

Dim contextMenu As ContextMenuStrip = DirectCast(tsmi.Owner, ContextMenuStrip)

しかし今、私がチェックした場合contextMenu.SourceControlNothing.

この場合、何が間違っているのか、またはなぜ SourceControl が設定されていないのか分かりますか?

前もって感謝します

4

3 に答える 3

1

これを試して:

DirectCast(DirectCast(DirectCast(
    tsmi.Owner, System.Windows.Forms.ToolStrip).
    TopLevelControl, System.Windows.Forms.Control),
    System.Windows.Forms.ContextMenuStrip).SourceControl
于 2011-08-18T18:49:02.063 に答える
1

質問に対する答えではない回避策を見つけました。ということで、しばらく開けておきます。

イベントを使用してContextMenuStrip Opening、ソース オブジェクトをローカルに保存しました。

Private Sub contextGrid_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles contextGrid.Opening

  _ContextSourceGrid = DirectCast(contextGrid.SourceControl, DataGridView)

End Sub

ToolStripMenuItem Clickすべてのイベント内の保存されたオブジェクトを直接参照します。

于 2010-06-28T13:27:41.540 に答える
0

数週間前にまったく同じ質問をしましたが、実際には、この動作が発生している理由を誰も理解できませんでした. 私が尋ねた質問を見てください。私が与えられた解決策はうまくいきました。

于 2010-06-22T22:43:39.160 に答える