我使用Graphics.DrawString
吸引我的用戶的文字是這樣的:如何用GDI強調多行文本的某些部分?
protected override void OnPaint(PaintEventArgs e)
{
RectangleF bounds = DisplayRectangle;
bounds.Inflate(-4, -4); // Padding
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Near;
format.LineAlignment = StringAlignment.Near;
format.Trimming = StringTrimming.None;
using (Brush bFore = new SolidBrush(ForeColor))
{
g.DrawString(Text, Font, bFore, bounds, format);
}
}
如果控制的Text
比DisplayRectangle
更寬,DrawString
很好地打破了Text
成多行的字邊界。
現在我想從Text
中劃下一些單詞,但我無法解決這個問題。我試着拆分Text
,然後MeasureString
這個字符串剛好在一個下劃線部分開始,DrawString
正常部分,然後DrawString
下劃線部分。但是,只有當Text
是單行時纔有效。
我相信使用一個孩子LinkLabel
或RichTextBox
呈現在我的控制的文本將解決這個問題,但我不喜歡使用一個子控件只是強調了幾句話的想法。有另一種方法嗎?
上面兩行xPos = 0。他們不應該是xPos = xPos + w1嗎? –
謝謝,我想這是我能做的最好的。我也嘗試在單詞邊界上使用MeasureCharacterRanges,但它似乎不適用於多行文本。 –
是的,xPos = 0是錯誤的。我的剪切和粘貼過於匆忙。 :) – Stewbob