C# 中的 LinkLabel 在双击时复制其文本

Posted

技术标签:

【中文标题】C# 中的 LinkLabel 在双击时复制其文本【英文标题】:LinkLabel in C# copies its Text on double-click 【发布时间】:2012-09-08 05:30:55 【问题描述】:

当我在 WindowsForms 中双击 LinkLabel 时,它会复制其文本;我怎样才能防止这种情况发生?

顺便说一句,这是一个 .Net 2.0 应用程序,如果这有什么不同的话。

谢谢

【问题讨论】:

它的文字是指链接标签文字吗?如果是的话,后面肯定有这个代码。 不,没有任何代码可以复制任何东西。自己试试;将 LinkLabel 添加到表单,双击它并粘贴到记事本中。 它似乎不是特定于 LinkLabel - Label 的行为方式相同(LinkLabel 派生自 Label)。 【参考方案1】:

您始终可以使用以下方法清除剪贴板:

Clipboard.Clear();

更新:

您可以在鼠标双击事件中使用此代码。

试试这个:

private void linkLabel1_MouseDoubleClick(object sender, MouseEventArgs e)
    
        Clipboard.Clear();
    

更新 2:

使用以下代码,它不会复制可链接的值,并且它还保留您的剪贴板。您必须将这些代码与鼠标输入事件和鼠标双击事件一起使用。

试试这个:

public string str;

    private void linkLabel1_MouseEnter(object sender, EventArgs e)
    
        str = Clipboard.GetText();
        linkLabel1.MouseDoubleClick+=new MouseEventHandler(linkLabel1_MouseDoubleClick);
    

    private void linkLabel1_MouseDoubleClick(object sender, MouseEventArgs e)
    
        Clipboard.SetText(str);
    

【讨论】:

不,这似乎是一个 hack;我不想清除用户的剪贴板 :) 我找不到覆盖默认行为的解决方案。我将此标记为答案,因为它是一种可以在某些情况下使用的解决方法。如果没有人有更好的解决方案,请分享。【参考方案2】:

似乎这种行为是内置在LinkLabel 中的,并且没有办法覆盖它。

测试显示剪贴板在触发 MouseDoubleClick 事件时已经更改。

FWIW,我从来不需要这个控件 - 一个带有一些样式和使用 MouseEnter/MouseLeave 事件的常规标签在许多项目中为我提供了很好的服务。

【讨论】:

一个普通的有同样的行为【参考方案3】:

您可以做的是创建自己的标签并将其从 Control 派生为公共类MyLabel : Control,然后自己在其中绘制文本为

受保护的覆盖无效 OnPaint(PaintEventArgs e) SolidBrush TextBrush = new SolidBrush(this.ForeColor); TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);

【讨论】:

以上是关于C# 中的 LinkLabel 在双击时复制其文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在双击时禁用WPF TreeView中树项的展开/折叠

安装程序在使用 Process.Start() 启动时失败,但在双击时工作

是否可以在 Intellij/AS 中使用“CamelHumps”选项,但让它在双击时选择字段/方法等的全名?

通过长按在 Android WebView 中启动缩放

如何在双击中隐藏文本选择工具菜单?

在 Kivy 上双击时如何回调和打印 MDLabel 的文本?