Newsgroup: it.comp.lang.visual-basic
Titolo: [?3] Larghezza ComboBox quando e' dropped down

Ciao a tutti,
E' la terza volta che posto questo messaggio !
Volete dirmi che non esiste soluzione?
Mi volete veder piangere ? :~(
Ho un combobox contenente una serie di items di differente lunghezza.
Alcuni di questi superano la larghezza del combobox e quando l'utente clicca
sulla freccetta del combobox, solo una parte dell'item e' visibile.
Per risolvere il problema nell'evento DropDown raddoppio la larghezza del
combobox e nell'evento OnClick la rimetto di nuovo a larghezza normale.
Se pero' l'utente non seleziona niente, ovvero il listindex = -1, allora mi
rimane il combobox a larghezza doppia. Questo avviene se cliccate sulla
freccetta due volte.
Ecco il codice che ho scritto finora:
Private Sub cboField_Click
    cboField.Width = 2000
End Sub
Private Sub cboField_DropDown
    cboField.Width = 4000
End Sub

Mi rendo conto che si tratta di un trucco assai becero, ma te lo butto lě
ugualmente (tieni conto che il click sulla combo senza selezionare nulla č
un evento non intercettabile tramite VB).
Invece della combo utilizzi:
-una textbox
-un pulsante
-una list
-la textbox sostituisce la singola linea editabile della combo
-il pulsante sostuisce il pulsantino di drop dpwn della combo
-la list č inizialmente invisibile e suffic. larga da contenere i vati item.
Semplicemente:
-all'inizio la text box contiene il primo item della list
-quando l'utente clicca sul pulsante, fai apparire la list
-quando l'utente seleziona un item, metti l'item nella text box e fai
scomparire la list; se l'utente clicca di nuovo il button senza selezionare
nulla, fa solo scomparire la list.
Ecco il codice:
Option Explicit
Private Sub Command1_Click()
If List1.Visible = True Then
    List1.Visible = False
Else
    List1.Visible = True
End If
End Sub
Private Sub Form_Load()
List1.AddItem "kdfb shjdb sdj fjshdf h dfjvghj"
List1.AddItem "kdfb sh45 sdj fjshdf h dfjvghj"
List1.AddItem "kdfb sh34dj fjshdf h dfjvghj"
List1.AddItem "kd52db sdj fjshdf h dfjvghj"
List1.AddItem "kd262365 sdj fjshdf h dfjvghj"
List1.AddItem "k678456b sdj fjshdf h dfjvghj"
Text1.Text = List1.List(0)
End Sub
Private Sub List1_Click()
Text1.Text = List1.List(List1.ListIndex)
List1.Visible = False
End Sub

Alcuni di questi superano la larghezza del combobox e quando l'utente
clicca
Potresti sfruttare la proprieta' ToolTipText impostandola al valore
dell'Item selezionato o resettandola (magari a "<nessuna selezione>") se non
e' selezionato niente...
Il codice dell'evento p.e. Combo1_Click() e di Combo1_Change() (dipende
anche dal tipo di Combo) potrebbe essere (Combo con Style = 0):
With Combo1
    If .ListIndex >= 0 Then
        .ToolTipText = .List(.ListIndex)
    Else
        If Len(.Text) > 0 Then
            .ToolTipText = .Text
        Else
            .ToolTipText = "<nessuna selezione>"
        End If
    End If
End With
Ricordati di inizializzare la proprieta' ToolTipText.
Ciao e auguri!
Gian Michele Bertoni
--
Home Page: 
http://space.tin.it/computer/gbertoni

sulla freccetta del combobox, solo una parte dell'item e' visibile.
Esiste una API che penso faccia al caso tuo, ma che ancora devo provare. Se
sei interessato ti posso spedire un eventuale esempio quando sarą pronto.
Saluti e auguri