この一見単純なトピックについて、どこにも答えを見つけることができませんでした: WinForms ListView コントロールの単一のサブアイテムのテキストを揃えることは可能ですか?
もしそうなら、どのように?
同じ列のテキストを別の方法で配置したいと考えています。
この一見単純なトピックについて、どこにも答えを見つけることができませんでした: WinForms ListView コントロールの単一のサブアイテムのテキストを揃えることは可能ですか?
もしそうなら、どのように?
同じ列のテキストを別の方法で配置したいと考えています。
例 :
listView1.Columns[1].TextAlign = HorizontalAlignment.Right;
列の「1」の配置を右に設定します
「ColumnHeader」クラスには、列内のすべてのサブ項目の配置を変更する「TextAlign」プロパティがあります。もっと派手なものが必要な場合は、いつでも「DrawSubItem」イベントを使用して所有者描画にすることができます。
将来の参考のために、これが私がそれを解決した方法です:
// Make owner-drawn to be able to give different alignments to single subitems
lvResult.OwnerDraw = true;
...
// Handle DrawSubItem event
private void lvResult_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
// This is the default text alignment
TextFormatFlags flags = TextFormatFlags.Left;
// Align text on the right for the subitems after row 11 in the
// first column
if (e.ColumnIndex == 0 && e.Item.Index > 11)
{
flags = TextFormatFlags.Right;
}
e.DrawText(flags);
}
// Handle DrawColumnHeader event
private void lvResult_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
// Draw the column header normally
e.DrawDefault = true;
e.DrawBackground();
e.DrawText();
}
DrawColumnHeader を処理する必要がありました。そうしないと、テキストまたは列区切りが描画されません。
@Fueledの回答に基づいて、列ヘッダーの配置を使用するために私が行ったことは次のとおりです。
protected override void OnDrawSubItem( DrawListViewSubItemEventArgs e )
{
// Match the subitem alignment to the column header alignment
TextFormatFlags flags = TextFormatFlags.Left;
switch ( this.Columns[ e.ColumnIndex ].TextAlign )
{
case HorizontalAlignment.Right:
flags = TextFormatFlags.Right;
break;
case HorizontalAlignment.Center:
flags = TextFormatFlags.HorizontalCenter;
break;
}
e.DrawText( flags );
}