.net - 有没有办法禁用 .NET 标签的 "double-click to copy"功能?

标签 .net winforms label

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

我还检查了应用程序中的其他标签,它们也会通过双击复制到剪贴板。我没有在这个程序中编写任何剪贴板代码,我使用的是标准的 .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

关于.net - 有没有办法禁用 .NET 标签的 "double-click to copy"功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519587/

相关文章:

c# - 我应该如何/应该用一个 linq 查询替换嵌套的 foreach ?

django - 删除Django Crispy表单中的标签

.net - 带有RabbitMQ.Client.dll异常的Microsoft.Diagnostics.Tracing.EventSource

c# - C# 中的进度监视器实现

java - 网络应用程序/网络服务器分离

c# - 带有数据网格和 TabControl 的 WPF MVVM Master 详细信息 View

c# - 如何以编程方式恢复备份

c# - 为什么要使用事件?

wpf - 使用带有 WPF 标签的 System.Drawing.Font

c++ - 多个按钮点击相同功能