C# 突出显示Windows窗体中的标签

C# 突出显示Windows窗体中的标签,c#,.net,windows,winforms,user-interface,C#,.net,Windows,Winforms,User Interface,有没有办法使.NET Windows窗体上的标签可高亮显示,以便复制文本。我尝试用一个看起来像标签的文本框来实现这一点,但这会导致光标闪烁。可选择的静态文本显示闪烁的光标并不罕见。如果您在Windows资源管理器中获取任何文件的属性并选择该窗口中的任何数据,您还将看到一个闪烁的光标。我在几年前做过此操作,我想我使用了此Win API调用(但带有一个常规文本框):我认为这非常接近: textBox.BackColor = System.Drawing.SystemColors.Control; t

有没有办法使.NET Windows窗体上的标签可高亮显示,以便复制文本。我尝试用一个看起来像标签的文本框来实现这一点,但这会导致光标闪烁。

可选择的静态文本显示闪烁的光标并不罕见。如果您在Windows资源管理器中获取任何文件的属性并选择该窗口中的任何数据,您还将看到一个闪烁的光标。

我在几年前做过此操作,我想我使用了此Win API调用(但带有一个常规文本框):

我认为这非常接近:

textBox.BackColor = System.Drawing.SystemColors.Control;
textBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
textBox.ReadOnly = true;
textBox.Text = "This is selectable text";
textBox.MouseUp += new MouseEventHandler(
                          delegate(object sender, MouseEventArgs e)
                             { HideCaret((sender as Control).Handle); });

[DllImport("User32.dll")]
static extern Boolean HideCaret(IntPtr hWnd);
如果需要跨越多条线路:

textBox.Multiline = true;

在User32.dll中有HideCaret函数。像这样使用它:

[DllImport("User32.dll")]
static extern bool HideCaret(IntPtr hWnd);

private void textBox_Enter(object sender, EventArgs e)
{
    HideCaret(textBox.Handle);
}

这将防止在Text Box有焦点时显示插入符号。

要考虑的一件事是继续使用标签,然后以编程方式将内容(标签的文本)复制到剪贴板中:使用< /P>

Clipboard.SetText(yourLabel.Text);

如果你想让它成为一个可预测的、行为良好的标准控件,并支持所有键盘和快捷键,你只需要一个文本框。然后闪烁的光标是一个正常的有用功能,为什么要反对它呢?

我能找到的唯一一个不使用光标就可以进行文本选择的控件是WebBrowser控件。我讨厌这是一个“功能”。很好的概括。很多时候,我发现以编程方式设置剪贴板的内容很有用。也许OP的应用程序也是如此——没有更多细节,你我都说不出来。我只是把它作为一个选项来介绍。事实上,你甚至会把它作为一个选项来建议,这表明你在用户交互方面没有任何经验。你错了。我为不同计算机能力的用户构建UI的经验告诉我,你甚至不能指望拥有平均能力的用户能够选择文本框中的所有文本并按Control-C复制该文本。说真的,即使有标签提供说明。-->(续…)根据我的建议,您可以在标签旁边有一个按钮(可能带有标准的Windows Copy图标)。当用户单击它时,我的代码保证整个标签内容进入剪贴板。普通用户友好且熟悉,不会乱动文本框。-->