有没有办法让.NET Windows表单上的标签为可突出显示,以允许复制文本。我试图使用一个看起来像标签的文本框来做到这一点,但这会导致闪烁的光标。
答案 0 :(得分:12)
我认为这非常接近:
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;
答案 1 :(得分:6)
如果您希望它是一个可预测,表现良好且标准的控件,并且支持所有键盘和快捷键,您只需要一个文本框。然后闪烁的光标是一个正常的有用功能,为什么要打它呢?
答案 2 :(得分:1)
可选静态文本显示闪烁的光标并不罕见。如果在Windows资源管理器中获取任何文件的属性并选择该窗口中的任何数据,您还会看到闪烁的光标。
答案 3 :(得分:0)
我之前做过这个,几年前,我想我使用了这个Win API调用(但是使用常规文本框):http://www.dreamincode.net/forums/showtopic35107.htm
答案 4 :(得分:0)
您在User32.dll中拥有HideCaret功能。像这样使用它:
[DllImport("User32.dll")]
static extern bool HideCaret(IntPtr hWnd);
private void textBox_Enter(object sender, EventArgs e)
{
HideCaret(textBox.Handle);
}
这样可以防止在文本框具有焦点时显示插入符号。
答案 5 :(得分:0)
要考虑的一件事是继续使用标签,然后使用以下方式以编程方式将内容(Label的文本)复制到剪贴板中:
Clipboard.SetText(yourLabel.Text);