在我的应用程序中,当打开某个表单时动态创建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来获得RichTextBox
在openFileDialog
:
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