2016-11-17 6 views
0

私の目的は、ドロップダウンの幅を調整してドロップダウンに含まれるすべての項目が表示されるようにすることです)。私は複数のコンボボックスのために使うことができる関数を作成しようとしています。現在、これはLOAD CBO関数から呼び出されていますが、データがロードされた後は.dropDownWidthを調整していません。コンボボックスの項目の幅をリストの最長の項目に合わせて再利用できる機能

Private Sub AdjustCombobox(ByVal comboboxName As ComboBox) 
    Dim maxwidth = 0 
    Dim temp = 0 

    For Each Item As Object In comboboxName.Items 
     temp = TextRenderer.MeasureText(Item.ToString(), comboboxName.Font).Width 
     If temp > maxwidth Then 
      maxwidth = temp 
     End If 
    Next 

    comboboxName.DropDownWidth = maxwidth 
End Sub 

EDIT:

 Dim da As New SqlDataAdapter(sql, objconnection) 
     Dim ds As New DataSet 

     da.Fill(ds, "Prov") 

     If ds.Tables("Prov").Rows.Count > 0 Then 
      With c 
       .DataSource = ds.Tables("Prov") 
       .ValueMember = "No" 
       .DisplayMember = "Name" 
       .SelectedIndex = -1 
      End With 
     End If 
+2

:あなたは '.DropDownWidth'を探している

' "Text" is the DisplayMember name/column name cboE.DropDownWidth = GetMaxDataSize(dtLorem, "Text") 

は1特に長い1、結果と、「Loremのイプサム悲しみ」の断片を使用します? – Plutonix

+0

はい私はちょうどこの1つを考え出しました - ごめんなさい@plutonix - 質問を更新しました – BobSki

+0

また、あなたのタイトルにlangタグを入れないでください。 – Plutonix

答えて

1

まず

comboboxload機能、私は実際DataSource、ないアイテム使用します。方法が異なるコンボが異なるフォントを使用する場合は、メソッドにそれぞれを渡すなど内部側溝、パディング、マージンを考慮してVerticalScrollBarWidthとわずかなファッジファクターを占めていること

Private Function GetMaxDataSize(dt As DataTable, mem As String) As Int32 

    Dim longestItem = dt.AsEnumerable.Select(Function(q) q.Field(Of String)(mem)). 
       OrderBy(Function(z) z.Length). 
       Last() 

    ' assumes as the CBO's use the same Font 
    Dim longestSize = TextRenderer.MeasureText(longestItem, cboE.Font) 
    Return longestSize.Width + 
       SystemInformation.VerticalScrollBarWidth + 5 

End Function 

注:これは本当に短いソリューションを可能に同じように。使用法:ドロップダウンの幅が独立して

enter image description here

+0

を参照してください。これはDataTableでうまくいくようですが、データセットでは機能しません。/ – BobSki

+1

DataSetにはデータが含まれていません。 myDSを渡す。テーブル( "Lorem") ' – Plutonix

+0

それはasEnumerableがsystems.data.dataTableのメンバーではないと言います - 私はimports.system.dataを持っています – BobSki

関連する問題