2016-11-21 25 views
0

私はカスタム 'コンボボックス'を持っています。私はアラビア語を使用しています。右から左へ、デフォルトのコンボボックスではプロパティから変更できますが、このカスタム 'コンボボックス'変更されていないので、クラスを右から左に変更するにはどうすればよいですか?右から左へのコンボボックスアイテム

これは私が使用しているものです:

Class AdvancedComboBox 
Inherits ComboBox 
    Public Shadows Property DrawMode() As System.Windows.Forms.DrawMode 
     Get 
      Return m_DrawMode 
     End Get 
     Set 
      m_DrawMode = Value 
     End Set 
    End Property 
    Private Shadows m_DrawMode As System.Windows.Forms.DrawMode 
    Public Property HighlightColor() As Color 
     Get 
      Return m_HighlightColor 
     End Get 
     Set 
      m_HighlightColor = Value 
     End Set 
    End Property 
    Private m_HighlightColor As Color 

    Public Sub New() 
     MyBase.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed 
     Me.HighlightColor = Color.Orange 
     AddHandler Me.DrawItem, New DrawItemEventHandler(AddressOf AdvancedComboBox_DrawItem) 
    End Sub 

    Private Sub AdvancedComboBox_DrawItem(sender As Object, e As DrawItemEventArgs) 
     If e.Index < 0 Then 
      Return 
     End If 

     Dim combo As ComboBox = TryCast(sender, ComboBox) 
     If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then 
      e.Graphics.FillRectangle(New SolidBrush(HighlightColor), e.Bounds) 
     Else 
      e.Graphics.FillRectangle(New SolidBrush(combo.BackColor), e.Bounds) 
     End If 

     e.Graphics.DrawString(combo.Items(e.Index).ToString(), e.Font, New SolidBrush(combo.ForeColor), New Point(e.Bounds.X, e.Bounds.Y)) 

     e.DrawFocusRectangle() 
    End Sub 
End Class 

答えて

3

理由は不明ですRightToLeftプロパティはプロパティボックスに固定されていませんが、カスタム図面であるため、右揃えプロパティを使用する必要があります。また、他のコントロールが使用するレンダラと一致するようにTextRendererの代わりのDrawStringを使用することをお勧め:、問題を

'e.Graphics.DrawString(combo.Items(e.Index).ToString(), e.Font, 
'      New SolidBrush(combo.ForeColor), New Point(e.Bounds.X, e.Bounds.Y)) 

TextRenderer.DrawText(e.Graphics, combo.Items(e.Index).ToString, e.Font, e.Bounds, 
         combo.ForeColor, Color.Empty, 
         TextFormatFlags.Right Or TextFormatFlags.RightToLeft) 
+0

はあなたにその完璧に感謝していますが、私は完全な素晴らしいことだろうと私を助けることができれば小さなことがありますArabic1のように3つの単語がある場合は、カスタム 'コンボボックス'で、ユーザータイプとして表示され、データベースに保存されているアラビア語と英語のユーザータイプを入力すると、デフォルトのコンボボックス(コンボボックス) English Arabic2データベースでは、カスタム 'combobox'のように表示されます:Arabic2 English Arabic1。私は謝罪します。 ちなみに、私は2行の値を1行で表示しています。 'ComboBox2.Items.Add(String.Format(" {0} |({1}) "、p_id、p_name))' –

+0

@Rabeeaqabaha私は、私はあなたのコメントで尋ねているものと闘っている。 3つの項目が必要な場合は、 'String.Format(" {0} {1} {2} "、p_id、p_name、p_other)'になりますが、それはあなたが直面している問題ではないと思われます。 – LarsTech

+0

私の問題は、テキストが適切に構造化されていないということです。例: アラビア語で3ワード、英語で1ワードをデータベースに追加すると、 '[word1(Arabic1)word2(English)word3(Arabic2)]] '、 'combobox'はこのように表示されました' [word3(Arabic2)word2(English)word1(Arabic1)] ' –

0

それは常に右から左になりますならば、あなたはAdvancedComboBoxコンストラクタでそれを行うことができます。

MyBase.RightToLeft = Windows.Forms.RightToLeft.Yes 
関連する問題