1

詳細モードの ListView があり、その項目のテキストの一部を太字にしたいと考えています (項目テキストで部分文字列が見つかった場所を強調表示するため)。

だから、このようなもの:

Somefilename/ boldText /etc

それを行う方法はありますか?

4

2 に答える 2

3

OwnerDrawわかりました。ListView最初にそのプロパティを に設定する必要があるため、これは難しくなりますtrueDrawColumnHeaderこれで、次の行を実装して配置する必要があります。

e.DrawDefault = true;

次に、次のコードを実装する必要があります。コードが存在する領域内DrawItemまたはDrawSubItem領域に応じて実装します。提供するコードは、文字列などを解析しておらず、さらに必要なものを解析していないため、完全ではないことに注意してください。自分でテキストを描画するため、選択したアイテムの描画を今すぐ実装します。

var boldFont = new Font(this.Font, FontStyle.Bold);
var location = new PointF(e.Bounds.Location.X, e.Bounds.Location.Y);

e.Graphics.DrawString("Somefilename/", this.Font, Brushes.Black, location);
var size = e.Graphics.MeasureString("Somefilename/", this.Font);

location.X += size.Width;
e.Graphics.DrawString("boldText", boldFont, Brushes.Black, location);
size = e.Graphics.MeasureString("boldText", boldFont);

location.X += size.Width;
e.Graphics.DrawString("/etc", this.Font, Brushes.Black, location);

注意すべきもう 1 つの点は、一部のフォントには余白があり、太字のフォントはより多くのスペースを占めるため、オフセットを少し調整する必要があることです。

Itemが でない場合は、イベントの をSubItem実装するだけです。アイテムが の場合は、その行を に実装します。e.DrawDefault = true;DrawSubItemSubItemDrawItem

于 2012-08-23T12:26:31.190 に答える
2

OnPaint をオーバーライドする必要があります。これらのリンクを試してください:

ラベルのテキストの一部を太字にする

Winforms のカスタム ListView?

ただし、リストビューは .net フレームワークによって描画されず、サポートされるだけです。そのため、OnPaint をオーバーライドしても呼び出されない場合があります。そのため、リストビュー コントロールもオーバーライドする必要がある場合があります。

于 2012-08-23T12:14:37.067 に答える