詳細モードの ListView があり、その項目のテキストの一部を太字にしたいと考えています (項目テキストで部分文字列が見つかった場所を強調表示するため)。
だから、このようなもの:
Somefilename/ boldText /etc
それを行う方法はありますか?
詳細モードの ListView があり、その項目のテキストの一部を太字にしたいと考えています (項目テキストで部分文字列が見つかった場所を強調表示するため)。
だから、このようなもの:
Somefilename/ boldText /etc
それを行う方法はありますか?
OwnerDraw
わかりました。ListView
最初にそのプロパティを に設定する必要があるため、これは難しくなりますtrue
。DrawColumnHeader
これで、次の行を実装して配置する必要があります。
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;
DrawSubItem
SubItem
DrawItem
OnPaint をオーバーライドする必要があります。これらのリンクを試してください:
ただし、リストビューは .net フレームワークによって描画されず、サポートされるだけです。そのため、OnPaint をオーバーライドしても呼び出されない場合があります。そのため、リストビュー コントロールもオーバーライドする必要がある場合があります。