Controllare che 2 o piu combobox non abbiano lo stesso valore (selecte...

venerdì 19 dicembre 2008 - 01.21

Gianni77 Profilo | Junior Member

Ho la necessita di controllare che 2 o piu combobox (4 nel mio caso) non abbiano lo stesso valore selezionato.
Utilizzo questo codice:

Dim SameL As Boolean = False Dim L1 As Integer = cmbLine1.SelectedValue Dim L2 As Integer = cmbLine2.SelectedValue Dim L3 As Integer = cmbLine3.SelectedValue Dim L4 As Integer = cmbLine4.SelectedValue If (L1 = L2 And L2 > -1) Or _ (L1 = L3 And L3 > -1) Or _ (L1 = L4 And L4 > -1) Or _ (L2 = L3 And L2 > -1 And L3 > -1) Or _ (L2 = L4 And L2 > -1 And L4 > -1) Or _ (L3 = L4 And L3 > -1 And L4 > -1) Then SameL = True End If

Il problema è che non funziona. Quando in due o piu combo non è selezionato nulla, mi restituiscono valore Zero (ho provato mettendo dei messagebox che mi restituiscono il selectedvalue per ogni combo) per cui una delle condizioni dell'if si verifica (io sapevo che le combo restituivano -1 quando non era selezionato nulla...), il problema è che non posso fare l'if mettendo il controllo dello zero al posto di -1 dal momento che posso selezionare dalla combo un elemento che ha 0 come selectedvalue (difatti le combo sono associate a dataset riempiti da database, viene mostrato un nome ma viene selezionato un ID).
Ci son

Teech Profilo | Expert

Puoi controllare le ComboBox 1 alla volta mettendo il codice nei rispettivi eventi Validating: http://msdn.microsoft.com/it-it/library/system.windows.forms.control.validating(VS.80).aspx

Ad esempio nel codice della validazione della ComboBox1 puoi fare:
Dim x as Integer = ComboBox1.SelectedValue Iif(Combobox2.SelectedValue=x,e.Cancel=True,e.Cancel=False) Iif(Combobox3.SelectedValue=x,e.Cancel=True,e.Cancel=False) Iif(Combobox4.SelectedValue=x,e.Cancel=True,e.Cancel=False)
Inoltre puoi utilizzare la proprietà CausesValidation della form per "forzare" le validazioni dei controlli.
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

sanbiz Profilo | Senior Member

>Il problema è che non funziona. Quando in due o piu combo non
>è selezionato nulla, ...

Per non modificare troppo il tuo codice, potresti semplicemente aggiungere un test sulla proprietà .Text del controllo:

Dim L1 As Integer = cmbLine1.SelectedValue
Dim L2 As Integer = cmbLine2.SelectedValue
Dim L3 As Integer = cmbLine3.SelectedValue
Dim L4 As Integer = cmbLine4.SelectedValue

If cmbLine1.Text = "" then L1 = -1
If cmbLine2.Text = "" then L2 = -1
If cmbLine3.Text = "" then L3 = -1
If cmbLine4.Text = "" then L3 = -1

--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

Gianni77 Profilo | Junior Member

Ho preferito questa soluzione di impostare a mano il -1 perchè per me piu intuitiva...(e funziona) Ho provato a cercare di capire quella questione della validazione ma.... non ci ho capito nulla
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5