有没有办法禁用.NET标签的"双击复制"功能?

Dav*_*oll 25 .net label winforms

这真的很烦人.我正在使用标签作为列表项用户控件的一部分,用户可以单击它来选择列表项并双击它以重命名它.但是,如果剪贴板中有名称,则双击标签会将其替换为标签文本!

我还检查了应用程序中的其他标签,他们也将双击复制到剪贴板.我没有在这个程序中编写任何剪贴板代码,我正在使用标准的.NET标签.

有没有办法禁用此功能?

TKT*_*KTS 7

我能够使用给出的其他答案的组合来做到这一点.尝试创建此派生类并使用它替换您希望禁用剪贴板功能的任何标签:

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)


Jae*_*aex 5

当内部文本值为空时,双击标签而不是尝试将文本值复制到剪贴板。我认为这种方法比其他替代方法更清洁:

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)


Kla*_*sen 3

我找到了这个帖子。最后一张海报似乎是微软给出的解决方案,尽管不是一个完美的解决方案。

  • 该帖子中提出的解决方案似乎清除了剪贴板,这更像是一种回避。但在我看来,比之前的行为要好一些。 (2认同)