Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB.NET] Combobox e item troppo lunghi

    Salve a tutti

    Il mio problema è questo: ho una combobox contenente degli item caricati da db che a volte hanno una lunghezza che supera le dimensioni della combo. Quindi anche aprendo la tendina le stringhe appaiono tagliate.
    Io vorrei che cliccando sulla combo, la tendina apparisse ridimensionata così da permettere la visualizzazione totale delle stringhe.
    Solo che non ho idea di come si possa fare sta cosa e sono certa che tra voi c'è chi potrà aiutarmi.

    Grazie a tutti
    lady



    ps.
    saluti particolari ad alka... non mi sono dimenticata di te

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  2. #2
    errata corrige: il capo mi ha comunicato ora che non dovrò riscrivere l'intero progetto in .net ma modificare quello esistente scritto in vb6; perciò l'aiuto ora ve lo chiedo per il VB6 e non per il .net.
    Grazie

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Ho provveduto a correggere il titolo.

    Ciao e buona prosecuzione!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La larghezza della tendina del combo la determini (in PIXEL) con

    codice:
    Private Declare Function SendMessage _
        Lib "user32" _
        Alias "SendMessageA" _
        (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
    
    Private Const CB_SETDROPPEDWIDTH = &H160
    e quindi con la chiamata

    codice:
        SendMessage Combo1.hwnd, CB_SETDROPPEDWIDTH, 100, 0
    in cui 100 e' la larghezza prescelta in PIXEL. Questa dipende dalla grandezza del piu' largo testo e dal font prescelto. Questa larghezza puo' essere calcolata in base a queste informazioni in precedenza e settata al momento del click, oppure puoi assegnarla con un valore fisso grande abbastanza.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie oregon, domani provo e ti faccio sapere.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  6. #6
    Ciao a tutti.
    Allora, il codice che mi ha postato oregon funziona.

    Il problema ora è far sì che la massima lunghezza della tendina della combo sia pari a quella della stringa più lunga contenuta.
    Non riesco a capire nè a ricordare come si fa il calcolo della larghezza della tendina a partire da quella del testo.
    Ho provato sia con la Len che con TextWidth ma in entrambi i casi non funziona; in particolare con il secondo sistema la tendina è sempre troppo grossa, quindi deve esserci un problema di tipo di dato visto che la SendMessage si aspetta un long.
    Spero di essermi spiegata.

    Qualcuno mi da una mano please?

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  7. #7
    provo a uppare almeno una volta...
    nessuno sa darmi una mano please?


    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non hai ancora risolto?

    Quale codice hai usato per il tuo problema? Come inserisci gli item ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Ciao oregon.

    Purtroppo non è un codice che ho scritto io ed è pure scritto in modo poco comprensibile; ciò che posso dirti è che per aggiungere gli item viene usato il metodo AddItem della combobox;
    Nel software è previsto un array di combobox, quindi nel codice la combobox corrente è indicata dall'indice i:
    codice:
    NameConv(i).AddItem recappLocal.Fields("Descrizione").value
    dove appunto NameConv(i) è la combobox e recappLocal è il recordset contenente i dati.
    Mi sono creata una variabie array locale al form (Private cWidth() As Long) nella quale per ogni indice (combobox) memorizzo la lunghezza massima.

    Questo è il codice nella sua interezza (le righe in rosso le ho aggiunte io):
    codice:
    Dim myA As Single
    Dim myB As Single
    myA = 0
    myB = 0 
    
    With recTagTableLocal
                
           ReDim cWidth(numNameConv)
    
           For i = 0 To numNameConv
                If IsNull(.Fields("Cod" & i).value) = True Then
                      CodiciN(i) = 0
                Else
                      CodiciN(i) = .Fields("Cod" & i).value
                End If
    
                recappLocal.Open "select * from Tab" & Format(i, "0") & " where ID=" & CodiciN(i) & " and Action <> 'D'", ConfigurationDB, adOpenStatic, adLockOptimistic
    
                If recappLocal.EOF = False Then 'sta caricando i dati nelle combobox
                      If IsNull(recappLocal.Fields("Descrizione").value) = True Then
                            NameConv(i).AddItem " "
                            myA = Len(" ") 
                      Else
                            NameConv(i).AddItem recappLocal.Fields("Descrizione").value
                            myA = Len(recappLocal.Fields("Descrizione").value)       
                      End If
                      If (CodiciN(i) <> 0) Then
                            NameConv(i).itemdata(NameConv(i).NewIndex) = CodiciN(i)
                            NameConv(i).ListIndex = 0
                      End If
                            
                      If myA > myB Then 
                            myB = myA 
                      Else 
                            myB = 100
                      End If
                                              
                End If
    
                cWidth(i) = myB
                        
                recappLocal.Close
                       
           Next i
                    
    End With
    Ora, quando viene generato l'evento DropDown, nel codice relativo devo richiamare l'istruzione SendMessage ma la larghezza della tendina viene ridimensionata male, cioè è troppo larga; perciò forse devo fare una qualche conversione, ma non saprei proprio come fare.
    Oppure semplicemente mi sono impappinata io da qualche parte nel codice.

    Grazie per il tuo aiuto
    lady

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosa hai scritto nell'evento DropDown ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.