MaxDropDownItems hat keine Wirkung

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    MaxDropDownItems hat keine Wirkung

    Hallo Community

    Wenn man bei einer Combobox die Eigenschaft MaxDropDownItems wirksam ändern möchte, muss man vorher die Eigenschaft IntegralHeight auf False einstellen...
    Aber wie geht das bei einer DatagridViewComboBoxColumn - hier finde ich keine Lösung?
    Ist das ein Bug? Ich kann diese Eigenschaft einfach nicht wirksam ändern...

    Was muss man denn da noch beachten :whistling:
    Ich habe dazu noch ein Testprojekt angelegt...

    VB1963
    Dateien
    • TestProjekt.zip

      (20,95 kB, 165 mal heruntergeladen, zuletzt: )
    Die Combobox, die in einer ComboboxColumn angezeigt wird, wird nur temporär generiert.
    Also im DGV_EditingControlShowing kannst du Zugriff erhalten aufs generierte, momentan gültige EditingControl.
    Dabei muss man natürlich beachten, dass auch die richtige Column "dran" ist, sonst gerätst du logischerweise evtl. an ein TextboxEditingControl oder dergleichen.

    Jo - mit dem Hinweis versuch mal dich durchzuhangeln.
    Ja genau :) Danke für diesen Hinweis!

    VB.NET-Quellcode

    1. Private Sub MasterDataGridView_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles MasterDataGridView.EditingControlShowing
    2. Dim cell = DirectCast(sender, DataGridView).CurrentCell : If cell Is Nothing Then Return
    3. If cell.ColumnIndex = myComboBoxColumn.DisplayIndex Then
    4. Dim cbx = DirectCast(e.Control, ComboBox)
    5. cbx.IntegralHeight = False
    6. cbx.MaxDropDownItems = 4
    7. End If
    8. End Sub
    Dateien
    Ich hab's jetzt so erweitert, dass die Wertzuweisung direkt von der Eigenschaftseinstellung MaxDropDownItems erfolgt (siehe Bildchen oben)...

    VB.NET-Quellcode

    1. Private Sub MasterDataGridView_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles MasterDataGridView.EditingControlShowing
    2. Dim dgv = DirectCast(sender, DataGridView)
    3. Dim cell = dgv.CurrentCell : If cell Is Nothing Then Return
    4. Dim col = dgv.Columns(cell.ColumnIndex) : If col.GetType <> GetType(DataGridViewComboBoxColumn) Then Return
    5. Dim cbx = DirectCast(e.Control, ComboBox)
    6. cbx.IntegralHeight = False
    7. cbx.MaxDropDownItems = CType(col, DataGridViewComboBoxColumn).MaxDropDownItems
    8. End Sub

    Edit: Tipp von @ErfinderDesRades

    VB.NET-Quellcode

    1. Private Sub MasterDataGridView_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles MasterDataGridView.EditingControlShowing
    2. Dim dgv = DirectCast(sender, DataGridView)
    3. Dim cell = dgv.CurrentCell : If cell Is Nothing Then Return
    4. If cell.OwningColumn.GetType <> GetType(DataGridViewComboBoxColumn) Then Return
    5. Dim cbx = DirectCast(e.Control, ComboBox)
    6. cbx.IntegralHeight = False
    7. cbx.MaxDropDownItems = CType(cell.OwningColumn, DataGridViewComboBoxColumn).MaxDropDownItems
    8. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()