Dav*_*oll 25 .net label winforms
这真的很烦人.我正在使用标签作为列表项用户控件的一部分,用户可以单击它来选择列表项并双击它以重命名它.但是,如果剪贴板中有名称,则双击标签会将其替换为标签文本!
我还检查了应用程序中的其他标签,他们也将双击复制到剪贴板.我没有在这个程序中编写任何剪贴板代码,我正在使用标准的.NET标签.
有没有办法禁用此功能?
我能够使用给出的其他答案的组合来做到这一点.尝试创建此派生类并使用它替换您希望禁用剪贴板功能的任何标签:
Public Class LabelWithOptionalCopyTextOnDoubleClick
Inherits Label
Private Const WM_LBUTTONDCLICK As Integer = &H203
Private clipboardText As String
<DefaultValue(False)> _
<Description("Overrides default behavior of Label to copy label text to clipboard on double click")> _
Public Property CopyTextOnDoubleClick As Boolean
Protected Overrides Sub OnDoubleClick(e As System.EventArgs)
If Not String.IsNullOrEmpty(clipboardText) Then Clipboard.SetData(DataFormats.Text, clipboardText)
clipboardText = Nothing
MyBase.OnDoubleClick(e)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If Not CopyTextOnDoubleClick Then
If m.Msg = WM_LBUTTONDCLICK Then
Dim d As IDataObject = Clipboard.GetDataObject()
If d.GetDataPresent(DataFormats.Text) Then
clipboardText = d.GetData(DataFormats.Text)
End If
End If
End If
MyBase.WndProc(m)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
当内部文本值为空时,双击标签而不是尝试将文本值复制到剪贴板。我认为这种方法比其他替代方法更清洁:
using System;
using System.Windows.Forms;
public class LabelNoCopy : Label
{
private string text;
public override string Text
{
get
{
return text;
}
set
{
if (value == null)
{
value = "";
}
if (text != value)
{
text = value;
Refresh();
OnTextChanged(EventArgs.Empty);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)