是否有一种正确的方法可以从.net Windows.Forms中为ListBox的右侧对齐项目?
您可以使用
example_box = ListBox()
example_box.RightToLeft = RightToLeft.Yes
这样可以实现正确对齐,但也可以从右到左打印您的项目。格式化也会在这里做一些非常奇怪的事情:
'%one two 4.72'显示为'one two 4.72%'
对于数字而言,这种效果非常好,但感觉相当不稳定。有更好的解决方案吗?
答案 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的任何现有功能都不允许您这样做;你可能必须覆盖控件的绘图并自己绘制它。