代码之家  ›  专栏  ›  技术社区  ›  cweston Given

突出显示Windows窗体标签

  •  8
  • cweston Given  · 技术社区  · 17 年前

    有什么办法做一个 标签 在a。NET Windows窗体 高亮显示 以允许复制文本。我试图用一个看起来像标签的文本框来实现这一点,但这会导致光标闪烁。

    6 回复  |  直到 17 年前
        1
  •  12
  •   Samuel    17 年前

    我认为这非常接近:

    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;
    
        2
  •  6
  •   Henk Holterman    17 年前

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

        3
  •  1
  •   BlueMonkMN    17 年前

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

        4
  •  0
  •   Paul Ruane    17 年前

    我以前做过这件事,几年前,我想我使用了这个Win API调用(但带有常规文本框): http://www.dreamincode.net/forums/showtopic35107.htm

        5
  •  0
  •   alexn    17 年前

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

    [DllImport("User32.dll")]
    static extern bool HideCaret(IntPtr hWnd);
    
    private void textBox_Enter(object sender, EventArgs e)
    {
        HideCaret(textBox.Handle);
    }
    

    这将防止插入符号在文本框有焦点时显示。

        6
  •  0
  •   Jay Riggs    17 年前

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

    Clipboard.SetText(yourLabel.Text);
    
    推荐文章