当我在 Visual Studio 的整个项目中搜索“剪贴板”这个词时,我找不到匹配项。
然而不知何故,我的程序似乎正在将剪贴板的内容更改为等于表单上控件的 .text 属性。怎么会这样?
我已经确定了处理程序,之后我的剪贴板似乎总是被更改,并添加了一个消息框来从我的剪贴板获取文本,以尝试确定它何时可能被更改。
MessageBox.Show(Clipboard.GetText)
即使在处理事件的子顶部,我的剪贴板也已更改为控件的 .text 属性。这是唯一处理此事件的子程序,剪贴板总是在此事件之后更改。
这是一个用 vb.net 编写的小型 winforms 项目。
更多信息:
当我单击它时,我的剪贴板被设置为标签的 .text 属性。标签是在这里制作的:
For i = 0 To lstTupChildren.Count - 1
Dim lbl As New Label()
lbl.Size = New System.Drawing.Size(250, 25)
lbl.Font = New System.Drawing.Font("Calibri (body)", 10)
lbl.Text = i + 1 & ". " & lstTupChildren(i).Item1
lbl.Location = New System.Drawing.Point(0, 25 * i)
If lstTupChildren(i).Item3 = True Then lbl.BackColor = Color.GreenYellow Else lbl.BackColor = Color.Orange 'sets the colour depending on whether the timesheet is active'
Me.Controls.Add(lbl)
AddHandler lbl.DoubleClick, AddressOf subChangeTimesheetState 'adds handler for double click to change status
'adds handlers for moving the overlay
AddHandler lbl.MouseDown, AddressOf Form_MouseDown
AddHandler lbl.MouseMove, AddressOf Form_MouseMove
'adds handler for hide context menu'
AddHandler lbl.MouseClick, AddressOf subRightClickMenu
Next
即使我注释掉处理程序: AddHandler lbl.DoubleClick, AddressOf subChangeTimesheetState
我的剪贴板仍然改变。
创建一个继承标签的新类,vb代码:
公共类 myLabel
Inherits Label
Private WM_GETTEXT As Integer = &HD
Private WM_LBUTTONDBLCLK As Integer = &H203
Private doubleclickflag As Boolean = False
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_LBUTTONDBLCLK Then
doubleclickflag = True
End If
If m.Msg = WM_GETTEXT AndAlso doubleclickflag Then
doubleclickflag = False
Return
End If
MyBase.WndProc(m)
End Sub
结束类