Come posso creare un elenco a discesa con caselle di controllo? Ho un'app windows (vb.net) e il controllo checkboxlist non è un'opzione reale con lo spazio disponibile sul mio modulo.Elenco DropDown con caselle di controllo
Grazie.
Come posso creare un elenco a discesa con caselle di controllo? Ho un'app windows (vb.net) e il controllo checkboxlist non è un'opzione reale con lo spazio disponibile sul mio modulo.Elenco DropDown con caselle di controllo
Grazie.
Il modo più semplice per creare questo effetto consiste nell'utilizzare tre controlli: un pulsante di modifica, un pulsante (a destra della modifica, con un'icona a discesa) e un checkboxlist come lo state usando ora.
Posizionare la casella di controllo sotto la modifica in modo che la sua larghezza corrisponda alla modifica e al pulsante accanto alla modifica e renderla invisibile. Ora, aggiungere il codice per il pulsante per:
Fai il CheckListBox visibile se non è visibile e di renderlo non visibile se è visibile (cioè, capovolgere il valore della .Visible).
Codice di chiamata per creare una versione "riepilogata" di ciò che è stato controllato e non controllare e visualizzarlo nella modifica. Ad esempio, se il "menu a discesa" contiene nomi di colori, è possibile che il codice crei un elenco delimitato da virgole dei colori controllati e lo visualizzi nella modifica.
Si può prendere questo un po 'oltre e mettere il CheckBoxList in un contenitore pannello e aggiungere piccoli bottoni alla "discesa" per eseguire qualunque funzioni speciali potrebbe essere opportuno nella vostra applicazione (selezionare tutte, deselezionare tutti, qualunque sia).
Dovresti fare il proprietario disegnato per ottenere quel tipo di funzionalità.
Se il modulo è fuori dallo spazio, suggerirei prima di cercare se è possibile rifattorizzare la GUI per renderla più semplice.
+1 per refactoring del gui. –
Sospetto che la tua domanda possa essere modificata poiché al momento non è molto chiara. Sto indovinando che vuoi un controllo elenco a discesa sul modulo, ma quando l'elenco scende hai caselle di controllo come le opzioni al suo interno? Se è così, ho il sospetto che tu stia guardando un set personalizzato di controlli (i controlli Telerik ti permetteranno di modellare un RadComboBox per esempio), ma non penso che ci siano controlli standard che permetteranno questo.
Sì, mi piacerebbe creare un elenco a discesa popolato con caselle combinate, come la finestra di dialogo del filtro in Excel 2007. Acquista è un po 'inutile, l'intero punto della mia app è praticare e imparare a fare alcune cose in vb.net – Iulian
Tendo a lavorare nel mondo di asp.net, ma con una ricerca su google sono stati trovati i seguenti: forse alcuni di essi avranno il codice che può aiutarti nell'apprendimento, in particolare il primo thread su SO sembra buono: http: //http : //stackoverflow.com/questions/859227/looking-for-a-wpf-combobox-with-checkboxes http://wpfcolorpicker.codeplex.com/ http://blogs.msdn.com/llobo/archive/ 2006/10/25/Split-Button-in-WPF.aspx http://www.eggheadcafe.com/tutorials/aspnet/e8585e81-34c8-4808-ae3e-b8b35d738842/wpf-datagrid-as-combobox.aspx –
Come si maschera un RadComboBox? –
Ho trovato un articolo su CodeProject su come farlo (più come "già fatto" ma almeno posso sondare il codice e imparare come lo ha fatto) Non so come mi sono perso in precedenza.
Questo è il link.
Ho trovato una soluzione più semplice e ho pensato di pubblicarlo se qualcuno che cercava come me poteva usarlo. Quello che ho fatto è stato inserire Listview a colonna singola sul mio modulo con View set to Detail mode, MultiSelect impostato su True e Checkboxes su True. Il seguente codice consentirà l'elenco a discesa. Dato che ho una selezione multipla, non è necessario visualizzare il valore selezionato come faresti in una casella combinata in modo che il menu a discesa appaia come un pulsante per mostrare/nascondere l'elenco. Nel codice seguente sto dividendo l'altezza di 4 perché la mia lista è statica e questo è il numero di caselle di controllo che ho nella mia lista. Se hai una lista dinamica, leggi il numero di elementi da Listview e usalo. Potrebbe essere necessario giocarci un po 'per ottenere l'aspetto che desideri.Ecco gli appuntamenti che uso:
Dim iListHt As Integer 'Set global variable to save height of list
'Save initial height of list and then collapse it to a button
iListHt = lvList.Height
lvList.Height = CInt(iListHt/4)
lvList.Columns(0).Text = "Display List"
Private Sub lvList_ColumnClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvList.ColumnClick
Dim iHt As Integer = lvList.Height
If (iHt < iListHt) Then
lvList.Height = iListHt
lvList.Columns(0).Text = "Hide List"
Else
lvList.Height = CInt(iHt/4)
lvList.Columns(0).Text = "Display List"
End If
lvList.Refresh()
End Sub
Private Sub lvList_ItemChecked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles lvList.ItemChecked
'Read values from list check boxes and update settings
UpdateSettings()
End Sub
L'evento ColumnClick gestisce quando fanno clic su quello che appare come il pulsante Mostra/Nascondi elenco e l'evento ItemChecked mi permette di gestire tutto ciò che ha bisogno di rispondere a un cambiamento nelle caselle di controllo . Il valore di ciascuno viene letto accedendo al valore "lvList.Items (iRowNum) .Checked" dove iRowNum è la riga che si desidera controllare. Spero che questo aiuti la prossima persona che ha bisogno di qualcosa di simile.
hground
Props per hground per l'utilizzo di un controllo ListView per questo scopo. Proverò a dare una versione migliorata del suo concetto.
Private Shared Sub Expand(lv As ListView)
Dim expandedHeight As Integer = 20 + (15 * lv.Items.Count)
lv.Height = expandedHeight
End Sub
Private Shared Sub Contract(lv As ListView)
Dim contractedHeight As Integer = 20
lv.Height = contractedHeight
End Sub
Private Sub uiIssuesStatusListView_GotFocus(sender As Object, e As System.EventArgs) _
Handles uiIssuesStatusListView.GotFocus, uiIssuesStatusListView.ColumnClick
Call Expand(uiThisListView)
End Sub
Private Sub uiIssuesStatusListView_LostFocus(sender As Object, e As System.EventArgs) _
Handles uiIssuesStatusListView.LostFocus, uiIssuesStatusListView.MouseLeave
Call Contract(uiThisListView)
End Sub
Si potrebbe voler modificare i valori letterali sopra in base alla dimensione del carattere o qualcosa del genere.
Utilizzando questo tipo di approccio (nota: non necessariamente raccomandato), rimango con l'elenco a discesa, ma quando si apre la parte a discesa, sovrapponi un elenco di caselle di controllo. –
questa è un'ottima idea, grazie mille – Iulian