Выделение меток Windows Forms

есть ли способ сделать метка в .NET Windows form должно быть highlightable разрешить копирование текста. Я попытался сделать это с текстовым полем, которое было сделано как метка, но это приводит к миганию курсора.

6 ответов


Я думаю, что это довольно чертовски близко:

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;

Если вы хотите, чтобы это был предсказуемый, хорошо себя и стандартный контроль со всей клавиатурой и поддержкой ярлыков, вам просто нужно текстовое поле. И тогда мигающий курсор-нормальная полезная функция, зачем бороться с ней?


Это не редкость для выбора статического текста, чтобы показать мигающий курсор. Если вы получите свойства любого файла в Проводнике Windows и выберите любые данные в этом окне, вы также увидите мигающий курсор.


Я сделал это ранее, пару лет назад, я думаю, что использовал этот вызов win API (но с обычным текстовым полем):http://www.dreamincode.net/forums/showtopic35107.htm


у вас есть функция HideCaret в User32.файл DLL. Используйте его так:

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

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

это предотвратит отображение курсора, когда текстовое поле имеет фокус.


одна вещь, которую нужно учитывать, - это идти вперед и использовать метку, но затем программно копировать содержимое (текст метки) в буфер обмена, используя:

Clipboard.SetText(yourLabel.Text);