Можно ли выделить текст на ярлыке формы Windows? - PullRequest
48 голосов
/ 13 октября 2011

Можно ли выделить / выделить часть текста в элементе управления Windows Form? Я знаю, что это возможно с помощью элемента управления RTFtextbox, но использование этого элемента управления было бы излишним, так как мне нужно создать много экземпляров метки.

Ответы [ 7 ]

82 голосов
/ 13 октября 2011

Можно ли выделить текст на ярлыке формы Windows? - НЕТ (по крайней мере, нет простого способа без переопределения метода Label.Paint)

Вы можете легко изменить TextBox для этой цели.

TextBox1.Text = "Hello, Select Me";
TextBox1.ReadOnly = true;
TextBox1.BorderStyle = 0;
TextBox1.BackColor = this.BackColor;
TextBox1.TabStop = false;

Не веришь? Вот пример для вас.

enter image description here

12 голосов
/ 27 августа 2013

Like Bala R ответил:

"Использовать TextBox с BorderStyle, установленным в None, и Readonly, установленным в true, и Backcolor для соответствия с контейнером."*

Если текстовая строка очень длинная и Width из TextBox недостаточно для отображения всего текста, тогда вы можете установить свойство Width TextBox для отображения всехэто текст.

Если вам нужно знать правильное число для Width, то вы можете использовать для этого MeasureString метод Graphics.Вы можете получить экземпляр из CreateGraphics() метода Control (TextBox в данном случае).

Первый параметр - это TextBox's Text, а второй параметр - это TextBox's Font.Эта функция возвращает SizeF struct.Вам нужно только свойство Width, конвертируйте его в целое число с (int)size.Width или (int)Math.Round(size.Width).

Не забудьте после этого вызвать метод Dispose() графического экземпляра, потому что он вам больше не нужен.


Вы можете написать свою собственную функцию, которая будет выполнятьвесь этот процесс:

static void SetText(TextBox textBox, string str)
{
   Graphics graphics = textBox.CreateGraphics();
   SizeF size = graphics.MeasureString(str, textBox.Font);
   graphics.Dispose();
   textBox.Width = (int)Math.Round(size.Width);
   textBox.Text = str;
}
7 голосов
/ 13 октября 2011

Нет, невозможно выделить текст на ярлыке формы Windows. Вместо этого вы можете использовать текстовое поле только для чтения.

5 голосов
/ 13 октября 2011

Используйте TextBox с BorderStyle, установленным на None и Readonly, установленным на true и Backcolor, чтобы соответствовать цвету контейнера.

3 голосов
/ 20 февраля 2019

Двойной щелчок на ярлыке скопирует текст в буфер обмена.Теперь это стандартное поведение меток Windows Forms.

3 голосов
/ 13 октября 2011

Вы не сможете выделить часть текста на ярлыке. Однако вы можете использовать изображение и установить его в свойстве Label.Image, если текст для этих меток является статическим.

0 голосов
/ 28 августа 2018

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

Так что, если вы не против скопироватьвесь текст, просто установите событие Click на этикетке, чтобы скопировать его текст в буфер обмена:

myLabel.Click += new System.EventHandler(MyLabel_Click);

// ...

private void MyLabel_Click(object sender, EventArgs e)
{
   Clipboard.SetText(myLabel.Text);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...