问题
I wasn't able to find an answer anywhere about this seemingly simple topic: is it possible to align text of a single subitem in a WinForms ListView control?
If so, how?
I would like to have text in the same column aligned differently.
回答1:
The "ColumnHeader" class has a "TextAlign" property that will change the alignment for all subitems in the column. If you need something more fancy you could always use the "DrawSubItem" event and make it owner drawn.
回答2:
example :
listView1.Columns[1].TextAlign = HorizontalAlignment.Right;
will set Column's "1" alignment to right
回答3:
Note: Due to a limitation of the underlying native ListView control (living in comctl32.dll), the first column cannot be aligned. It will be always aligned left. The second limitation is when you custom draw (custom draw subitems): when you enable column reordering, the text of the first column is NOT reordered correctly. I solved this limitation (would not call it a bug, because the listview supports many list styles and the internal data structure of a list view is a tree like one) by not allowing to reorder the first column, which in most cases is no problem, because you'll use some sort of key for the first column like number or something similar.
回答4:
For future reference, here's how I solved it:
// 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();
}
It was necessary to handle the DrawColumnHeader, otherwise no text or column separators would be drawn.
来源:https://stackoverflow.com/questions/561798/how-do-i-align-text-for-a-single-subitem-in-a-listview-using-c