'Copy selected text of a RichTextBox to the Clipboard with a Mouse Click
I have a RichTextBox(RTB) that obtains text from two sources a txt file and data from a SQLite DB.
The RTB has ReadOnly
property set to False
.
I am trying to NOT use the ContextMenuStrip. This may be impossible ?
Here is the process fetch data from DB and populate the RTB
Highlight text I want to copy and click inside the RTB RESULT NO Copy
Second process tried same fetch data from DB this time I click on the form my code runs but no text is copied.
Here is the Code NOT neat but I am testing.
Public Class frmViewCode
Dim gvW As String
Public Sub rtbViewCode_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
If e.Button = System.Windows.Forms.MouseButtons.Left Then
BigCopy()
MsgBox("It Worked")
End If
End Sub
OK I Changed BigCopy now the Selected code is added to the Clipboard
But I still need to click on the Form to execute the code.
Still would like to click on the RTB to fire the BigCopy code ?
Public Sub BigCopy()
Dim start = rtbViewCode.SelectionStart
Dim substring = rtbViewCode.Text.Substring(0, start)
Dim words = substring.Split(New String() {" ", vbCrLf}, StringSplitOptions.None)
Dim count = words.Length
gvW = rtbViewCode.SelectedText
Clipboard.SetText(gvW)
End Sub
I am curious as how to change the System.Windows.Forms so I can click on the RTB.
The Question How to select text in a RTB and copy that text to the Clipboard with the Mouse?
I also tried this code:
Public Sub RightMouse_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim start = rtbViewCode.SelectionStart
Dim substring = rtbViewCode.Text.Substring(0, start)
Dim words = substring.Split(New String() {" ", vbCrLf}, StringSplitOptions.None)
Dim count = words.Length
MsgBox("Len " & count)
lblMsg.Text = count.ToString()
'gvW = words.ToString
'gvW = rtbViewCode.SelectedText
'Clipboard.SetText(gvW)
Clipboard.SetText(rtbViewCode.SelectedRtf, TextDataFormat.Rtf)
MsgBox("here " & gvW)
End Sub
Solution 1:[1]
I think you'd better off using a ContextMenuStrip. Anyway, you can use a Custom Control to trap WM_LBUTTONDOWN
and perform a copy when the Left Mouse Button is pressed, there's an active selection and the mouse Pointer is inside the selection.
In this case, you suppress the message, so the selection is not removed.
Set HideSelection = False
if you want to keep the selection visible while moving the focus to other Controls.
If this is not exactly the intended behavior, change the IsMouseDownInsideSelection()
method or the logic in WM_LBUTTONDOWN
.
Public Class RichTextBoxEx
Inherits RichTextBox
Private Const WM_LBUTTONDOWN As Integer = &H201
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_LBUTTONDOWN Then
If SelectionLength > 0 AndAlso IsMouseDownInsideSelection() Then
Copy()
Return
End If
End If
MyBase.WndProc(m)
End Sub
Private Function IsMouseDownInsideSelection() As Boolean
Dim charIdx = GetCharIndexFromPosition(PointToClient(MousePosition))
If charIdx >= SelectionStart AndAlso charIdx <= (SelectionStart + SelectionLength) Then Return True
Return False
End Function
End Class
Solution 2:[2]
You Can Use Clipboard.SetText(RichTextBox1.Text)
Function To Copy All Text To Clipboard
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 |