如何创建修改“当前控件”的上下文菜单



在我的应用程序中,当打开某个表单时动态创建RichTextBox。目前,点击该框会打开一个OpenFileDialog,用户在其中选择一个文件,然后将文件位置放入RichTextBox中。

我的最终用户昨天告诉我,他想要以下内容:

  • 左键点击RichTextBox应该会打开资源管理器
  • 中指定的文件右键单击应该打开一个ContextMenuStrip,其中一个选项是"选择文件"。

我修改后的代码包含在以下gist中:

我的openFileDialog子程序,它为ToolStripMenuItem处理.Click事件

Sub openFileDialog(ByVal sender As System.Windows.Forms.ToolStripMenuItem, ByVal e As System.EventArgs)
    Dim myOpenFileDialog As New OpenFileDialog()
    If Not sender.GetCurrentParent().Parent.Text = "" Then
        myOpenFileDialog.InitialDirectory = sender.GetCurrentParent().Parent.Text
    Else
        myOpenFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    End If
    myOpenFileDialog.Filter = "All files (*.*)|*.*"
    myOpenFileDialog.FilterIndex = 1
    myOpenFileDialog.RestoreDirectory = True
    If myOpenFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
        sender.GetCurrentParent().Parent.Text = myOpenFileDialog.FileName
    End If
End Sub

我的fileControlRightClicked子控件,它处理RichTextBox的右键单击

Sub fileControlRightClicked(ByVal sender As System.Windows.Forms.RichTextBox, ByVal e As System.Windows.Forms.MouseEventArgs)
    If e.Button <> Windows.Forms.MouseButtons.Right Then Return
    Dim cms = New ContextMenuStrip
        'cms.Parent = sender
        Dim item1 = cms.Items.Add("Select File")
        item1.Tag = 1
        AddHandler item1.Click, AddressOf openFileDialog
        cms.Show(sender, e.Location)
End Sub

除了这两段代码,我能想到的唯一相关的代码就是

AddHandler .MouseUp, AddressOf fileControlRightClicked

声明RichTextBox时使用。

如何引用被点击的RichTextBox的具体实例?

显然,使用sender.GetCurrentParent().Parent不起作用,sender.GetCurrentParent.SourceControl也不起作用。(这些可以在上面的openFileDialog要点中看到)

如果我遗漏了任何相关信息或代码,或者不清楚我遇到的问题,请评论,我将纠正/添加任何必要的信息

我认为你只需要一点cast来获得RichTextBoxopenFileDialog:

Sub openFileDialog(ByVal sender As System.Windows.Forms.ToolStripMenuItem, ByVal e As System.EventArgs)
    Dim menu = DirectCast(sender.GetCurrentParent(), ContextMenuStrip)
    Dim rtb = DirectCast(menu.SourceControl, RichTextBox)
    ...
End Sub

相关内容

  • 没有找到相关文章

最新更新