#.net #vb.net #winforms
#.net #vb.net #winforms
Вопрос:
В моем приложении RichTextBox
динамически создается при открытии определенной формы. В настоящее время при нажатии на поле открывается окно OpenFileDialog
, где пользователь выбирает файл, а затем местоположение файла вводится в RichTextBox
.
Мой конечный пользователь сказал мне вчера, что вместо этого он хочет следующее:
- Щелчок левой кнопкой мыши
RichTextBox
должен открыть указанный файл в проводнике - Щелчок правой кнопкой мыши должен открыть
ContextMenuStrip
, причем одним из вариантов в строке является «Выбрать файл».
Мой пересмотренный код содержится в следующих основных положениях:
Мой подраздел OpenFileDialog, который обрабатывает .Click
событие для ToolStripMenuItem
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 выше)
Если я пропустил какую-либо соответствующую информацию или код или не был уверен в возникшей у меня проблеме, пожалуйста, прокомментируйте, и я исправлю / добавлю любую необходимую информацию.
Ответ №1:
Я думаю, вам просто нужно немного кастинга, чтобы получить 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