web-dev-qa-db-ja.com

Windowsフォームラベルのテキストを選択することはできますか?

Windowsフォームのラベルコントロールでテキストの一部を強調表示/選択することは可能ですか? RTFtextboxコントロールでその可能性を知っていますが、ラベルの多くのインスタンスを作成する必要があるため、そのコントロールを使用するのはやり過ぎです。

51
tunafish24

Windowsフォームラベルのテキストを選択することはできますか? -NO(少なくとも、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

85
CharithJ

Bala R回答:

「BorderStyleがNoneに設定され、Readonlyがtrueに設定され、Backcolorがコンテナのそれに一致するようにTextBoxを使用します。」.

テキスト文字列が非常に長く、WidthTextBoxだけではすべてのテキストを表示できない場合は、WidthTextBoxプロパティを設定して表示できます。それはすべてテキストです。

Widthの正しい番号を知る必要がある場合は、MeasureStringGraphicsメソッドを使用できます。インスタンスは、Control(この場合はTextBox)のCreateGraphics()メソッドから取得できます。

最初のパラメーターはTextBoxのテキストで、2番目のパラメーターはTextBoxのフォントです。この関数は、SizeF構造体を返します。必要なのは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;
}
_
12
user2133061

いいえ、Windowsフォームラベルのテキストを選択することはできません。その代わりに、読み取り専用のテキストボックスを使用できます。

7
Amry

TextBoxBorderStyleに設定し、NoneReadonlyに設定し、Backcolorをコンテナのそれに一致させるtrueを使用します。

5
Bala R

ラベルをダブルクリックすると、テキストがクリップボードにコピーされます。これは、Windowsフォームラベルのデフォルトの動作です。

4
vmil

ラベル上のテキストの一部を強調表示することはできません。ただし、これらのラベルのテキストが静的な場合は、画像を使用してLabel.Imageプロパティに設定できます。

3
gjohn

この質問は、ラベルのテキストのpartsを選択することに関するものであることは知っていますが、テキストは最終的にクリップボードに配置されるものと想定しています。

したがって、テキスト全体をコピーしてもかまわない場合は、ラベルにClickイベントを設定して、テキストをクリップボードにコピーします。

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

// ...

private void MyLabel_Click(object sender, EventArgs e)
{
   Clipboard.SetText(myLabel.Text);
}
0
Markus L