2011-03-17 12 views
1

.net Windows.FormsからListBoxの項目を右揃えにする適切な方法はありますか?Windows.Forms.ListBox内の項目の右揃え

あなたは

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

これは、右揃えを有効に使用することができますが、また、右から左へのあなたの項目を表示します。また、書式設定は、ここにいくつかの本当に奇妙なことを行います。

「%1 2 4.72」の数字については

は、これだけは非常によく動作しますが、かなりグラグラ感じている「1 2 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フォームの既存の機能はありません。コントロールの描画をオーバーライドして、自分で描画する必要があります。

関連する問題