Правильное выравнивание элементов в Windows.Forms.ListBox - PullRequest
1 голос
/ 17 марта 2011

Есть ли правильный способ выравнивания элементов вправо для списков элементов из .net Windows.Forms?

Вы можете использовать

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

Это позволяет выравнивать по правому краю, но также печатает ваши элементы справа налево. Также форматирование делает некоторые действительно странные вещи здесь:

«% один два 4.72» отображается как «один два 4.72%»

Только для цифр это работает довольно хорошо, но выглядит довольно шатко. Есть ли лучшие решения?

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Разметка RightToLeft предназначена для арабской и еврейской культур, они пишут текст справа налево.Это также влияет на то, как отображается текст, вы обнаружили побочный эффект.Вам нужно использовать владелец-рисовать, чтобы получить так, как вы хотите.Добавьте новый класс в ваш проект и вставьте код, показанный ниже.Компиляция.Перетащите новый элемент управления из верхней части панели инструментов на форму.

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();
    }
}
0 голосов
/ 17 марта 2011

Я не думаю, что существуют какие-либо функции Windows Forms, которые позволили бы вам сделать это;возможно, вам придется переопределить рисунок элемента управления и нарисовать его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...