Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    44

    [vb2010] - Problema ComboBox

    Ciao

    vi descrivo il mio problema: ho una ComboBox con all'interno un elenco di elementi.
    Il nome di ogni elemento può anche essere composto da più parole e quindi può risultare anche parecchio lungo.
    Il punto è questo: è possibile aggiungere un controllo ComboBox che graficamente non sia molto esteso ma che nel momento in cui si clicca sul controllo questo visualizzi l'elenco con i nomi degli elementi non tagliati?...in pratica l'area visibile dovrebbe aumentare alla pressione del controllo, o qualcosa del genere.
    Grazie!

  2. #2
    puoi provare a mettere due controlli: il primo simula visivamente la combo box chiusa, e lo fai della larghezza che desideri; quando questo bottone viene premuto, apri la combo box vera e propria (che prima era nascosta)

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Si, ma non so se il mio metodo sia quello "giusto"...ho iniziato da poco a studiare la ComboBox per creare un controllo "particolare"...
    Imposta la proprietà DrawMode:
    codice:
    ComboBox1.DrawMode = DrawMode.OwnerDrawVariable
    poi scrivi:
    codice:
        Private Sub ComboBox1_MeasureItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MeasureItemEventArgs) Handles ComboBox1.MeasureItem
    
            If ComboBox1.DropDownWidth < e.Graphics.MeasureString(ComboBox1.Items(e.Index), New Font(ComboBox1.Font, ComboBox1.Font.Size)).Width Then
                ComboBox1.DropDownWidth = e.Graphics.MeasureString(ComboBox1.Items(e.Index), New Font(ComboBox1.Font, ComboBox1.Font.Size)).Width + 20
            End If
    
        End Sub
    
        Private Sub ComboBox1_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
    
            e.DrawBackground()
    
            e.Graphics.DrawString(ComboBox1.Items(e.Index), ComboBox1.Font, New SolidBrush(ComboBox1.ForeColor), New RectangleF(e.Bounds.Location, e.Bounds.Size))
    
        End Sub
    In pratica, in base al Font viene misurato l' aspetto grafico di ogni elemento della ComboBox e di conseguenza si imposta la larghezza della DropDown. Il "+ 20" è messo ad "occhio" perchè non so come ottenere la larghezza della scrollbar...
    Forse il codice non è molto leggibile perchè mi sono messo in testa di non usare variabili superflue...se vuoi approfondire ho preso spunto da questi link:
    http://msdn.microsoft.com/it-it/libr...v=vs.100).aspx
    http://msdn.microsoft.com/it-it/libr...v=vs.100).aspx

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    44
    Vinsent ho provato il tuo metodo, direi che va molto bene.
    Secondo te è possibile avere l'elenco completo degli item quando si seleziona il controllo senza la barra di scorrimento?
    Grazie mille!

  5. #5
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Basta impostare la proprietà DropDownHeight.
    Prendi il numero degli items e moltiplica per l' altezza ottenuta dalla proprietà ItemHeight:
    codice:
    ComboBox1.DropDownHeight = ComboBox1.Items.Count * ComboBox1.ItemHeight + 20
    Il 20 mi tormenta...senza compare la scrollbar...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.