Windows.Forms.ListBox中项目的右对齐方式

时间:2011-03-17 15:57:17

标签: .net winforms listbox

是否有一种正确的方法可以从.net Windows.Forms中为ListBox的右侧对齐项目?

您可以使用

example_box = ListBox()
example_box.RightToLeft = RightToLeft.Yes

这样可以实现正确对齐,但也可以从右到左打印您的项目。格式化也会在这里做一些非常奇怪的事情:

'%one two 4.72'显示为'one two 4.72%'

对于数字而言,这种效果非常好,但感觉相当不稳定。有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

RightToLeft布局适用于阿拉伯语和Hewbrew文化,它们从右向左书写文本。它还会影响文本的呈现方式,您会发现副作用。您需要使用所有者绘制来按照您希望的方式获取它。在项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部拖放到表单上。

using System;
using System.Drawing;
using System.Windows.Forms;

class ReverseListBox : ListBox {
    public ReverseListBox() {
        this.DrawMode = DrawMode.OwnerDrawFixed;
    }
    protected override void OnDrawItem(DrawItemEventArgs e) {
        e.DrawBackground();
        if (e.Index >= 0 && e.Index < this.Items.Count) {
            var selected = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
            var back = selected ? SystemColors.Highlight : this.BackColor;
            var fore = selected ? SystemColors.HighlightText : this.ForeColor;
            var txt = this.Items[e.Index].ToString();
            TextRenderer.DrawText(e.Graphics, txt, this.Font, e.Bounds, fore, back, TextFormatFlags.Right | TextFormatFlags.SingleLine);
        }
        e.DrawFocusRectangle();
    }
}

答案 1 :(得分:0)

我认为Windows Forms的任何现有功能都不允许您这样做;你可能必须覆盖控件的绘图并自己绘制它。