2011-10-13 13 views
41

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

+1

は、あなたが「選択」とはどういう意味ですか:


あなたはすべて、この処理を行いますあなた自身の関数を書くことができますか?このテキストを後で使用するには、コードで選択することを意味しますか? – GianT971

+1

申し訳ありません@ジョン...選択して、私はテキスト選択を意味します。 RichTextBoxでは、 "SelectedText"などのプロパティを使用して、テキスト全体の一部を選択/強調表示することができます。このエフェクトはマウスで手動でテキストを選択/強調するのと似ています。 – tunafish24

+2

ちょっとしたアイデア:ラベルから派生したクラスを作成して、選択するテキストの開始インデックスと終了インデックスを保存してから、onPaintイベントをオーバーライドしてテキストを半透明の四角形で描画することができます。 – Marco

答えて

67

Windowsのフォームラベルでテキストを選択することはできますか? - いいえ(Label.Paintメソッドをオーバーライドしないと少なくとも簡単な方法はありません)

この目的でTextBoxを簡単に変更できます。

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

信じられませんか?ここにあなたのための例があります。 バラR同様

enter image description here

+7

問題は、テキストボックスのテキストをダイナミックに設定している場合、ラベルとは異なり、テキストボックスよりも広いテキストを非表示にすることです。 –

+2

@ TheMuffinManあなたは«WordWrap»プロパティを«true»に設定する必要があります。 –

+1

必要に応じて、Multiline = Trueを設定してTextBoxの高さを変更することもできます。 –

7

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

5

は、コンテナのものと一致するtrueと背景色のへNoneReadonlyセットにTextBoxBorderStyleとのセットを使用してください。

3

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

+1

実際には実装するのが難しく、テキストも動的です。その理由の一部を強調する必要があります。 – tunafish24

11

は答えた:

は「BorderStyleをなしに設定し、読み取り専用の容器のものと一致し 真と背景色のに設定してテキストボックスを使用してください。」。

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

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

最初のパラメータはTextBoxのTextで、2番目のパラメータはTextBoxのFontです。この関数は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; 
} 
+1

このコードで高さのサイズを固定する固定幅のテキストボックスがある場合は、この質問を参照してください。https://stackoverflow.com/questions/29299297/measure-text-height-wrapped-in-a-指定された幅 – QuickDanger

関連する問題