如何使用C#在ListView中对齐单个子项的文本?

我无法在这个看似简单的主题的任何地方找到答案: 是否可以在WinForms ListView控件中对齐单个子项的文本?

如果是这样,怎么样?

我希望同一列中的文本以不同方式对齐。

“ColumnHeader”类具有“TextAlign”属性,该属性将更改列中所有子项的对齐方式。 如果你需要更加花哨的东西,你可以随时使用“DrawSubItem”事件并将其绘制为所有者。

例子:

listView1.Columns[1].TextAlign = HorizontalAlignment.Right; 

将Column的“1”对齐设置为右

注意:由于底层本机ListView控件(位于comctl32.dll中)的限制,第一列无法对齐。 它将始终左对齐。 第二个限制是当您自定义绘制(自定义绘制子项)时:启用列重新排序时,第一列的文本未正确重新排序。 我解决了这个限制(不会称之为bug,因为listview支持许多列表样式,列表视图的内部数据结构就像一个树),不允许重新排序第一列,这在大多数情况下都没有问题,因为你会使用某种键作为第一列,如数字或类似的东西。

为了将来参考,这是我如何解决它:

 // 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,否则不会绘制文本或列分隔符。