Выделение меток 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);