2011-03-17 5 views
1

.net Windows.Forms의 ListBox에 대해 오른쪽으로 항목을 정렬하는 적절한 방법이 있습니까?Windows.Forms.ListBox의 항목 오른쪽 정렬

당신은

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

이 오른쪽 정렬을 가능하게 사용할 수 있습니다뿐만 아니라 오른쪽에서 왼쪽으로 항목을 인쇄합니다. 아주 잘 '한이 4.72 %'숫자에 대한

은이 작품으로 표시됩니다

'하나 둘 4.72가 %', 오히려 불안정한 느낌 : 또한 서식 여기에 몇 가지 정말 이상한 일을한다. 더 나은 해결책이 있습니까?

답변

2

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

대단히 고마워! 훌륭한 작품 (적어도 IronPython 모듈로). –

0

Windows Forms의 기존 기능 중 사용자가이 기능을 사용할 수 있다고 생각하지 않습니다. 컨트롤의 그림을 재정의하고 직접 그려야 할 수도 있습니다.