Newsgroup: it.comp.lang.visual-basic
Titolo: Bloccare Una Combobox, come?

Ho da porvi una domanda semplicissima.
Ho creato una Combobox e ho aggiunto alcuni valori al suo interno.
Come č possibile impedire la scrittura di nuovi valori da parte dell'utente? 
Come lo si obbliga a scegliere tra quelli precompilati nella Combo?
Se attivo il Locked non fa piů inserire nemmeno quelli precompilati.
Grazie 

 Se attivo il Locked non fa più inserire nemmeno quelli precompilati.
Style?
-- 
Salutoni
Sergio
C'è il giorno in cui nasci e quello in cui scegli di vivere
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Style?
0 -Dropdown Combo 

 0 -Dropdown Combo
Ci sei quasi. Scendi un paio di posizioni, e sei a cavallo :-)


 Ci sei quasi. Scendi un paio di posizioni, e sei a cavallo :-)
Nel senso che devo metterla come list?
Sembra funzionare.... 

 Sembra funzionare....
Direi che è fatta apposta :-)


 -- 
Nasce pero' un problema selezionando list:
Quando cerco di inserire nuovi campi nel DB con il tasto:
Private Sub Command2_Click()
        'Attiva la funzione di aggiunta.
        Data1.Recordset.AddNew
            Text17.Visible = True
            Combo18.Visible = True
End Sub
Ricevo questo errore:
La proprietą 'Text' č in sola lettura.
C'č un modo per non far comparire questo messaggio? 

 La proprietą 'Text' č in sola lettura.
Ehm...
Esattamente, su quale riga di codice ti compare l'errore?
-- 
Salutoni
Sergio
C'č il giorno in cui nasci e quello in cui scegli di vivere


 Esattamente, su quale riga di codice ti compare l'errore?
Non mi da errore nella compilazione. Quando lancio l'exe tutto funziona, 
modifica dei campi del DB ma quando clicco sul tasto aggiungi nuovo (codice 
postato sopra), mi compare quel messaggio. Una volta cliccato su ok, 
inserito tutti i dati e poi cliccato su salva il programma funziona 
correttamente. E' solo questo messaggio che compare che non serve a nulla 
che vorrei eliminare. 

 postato sopra), mi compare quel messaggio.
Il problema è che nella porzione di codice che hai indicato io non vedo
alcun riferimento alla proprietà text del combo, per cui mi domandavo se
l'errore non fosse da qualche altra parte...
-- 
Salutoni
Sergio
C'è il giorno in cui nasci e quello in cui scegli di vivere


 l'errore non fosse da qualche altra parte...
In realtà indirettamente questa operazione la fa.
Quando viene chiamata Data1.Recordset.AddNew
questa cancella il vecchio valore che si trova nella combo e cerca di 
"creare" uno spazio nuovo vuoto per poter aggiungere un nuovo campo nel DB. 
Evidentemente è proprio qui quando cerca di resettare il campo che salta 
fuori quell'errore.
Se ci fosse un modo per dirgli di non mostrare errori quando clicco su quel 
tasto sarebbe l'ideale.
In pratica la mia agenda è stata ispirata fortemente a quest'altra che ho 
trovato in rete già fatta:
http://programmazione.html.it/guide/lezione/1398/unagenda-elettronica-con-vb-linterfaccia/
Grazie

 Grazie

Rettifico:
2. Impostare il combo su 2 - Dropdown List; in questo caso devi PRIMA
riempire il combo con TUTTI i valori che è possibile trovare in quel
campo della tabella
_


 ha scritto nel messaggio 
news:1169632906.2...@v33g2000cwv.googlegroups.com...
Hai due soluzioni.
1. Impostare il combo su 0 - Dropdown Combo; in questo caso l'errore
non si verifica più, ma devi gestire l'eventuale inserimento di un
valore Text non presente nella lista;
Intendi che se per esempio l'utente inserisce un valore diverso da quello 
della Combobox, il programma lo segnali con un errore.
Tipo:
If combo.text <> valori predefiiniti then
error....inserire solo i valori corretti
end if
Non c'è un modo più elegante? 

 ha scritto nel messaggio 
news:1169633538.7...@m58g2000cwm.googlegroups.com...
Rettifico:
2. Impostare il combo su 2 - Dropdown List; in questo caso devi PRIMA
riempire il combo con TUTTI i valori che è possibile trovare in quel
campo della tabella
Sai che non ho capito questa soluzione?
Scusa nel combo ho già inserito tutti i valori che voglio trovare in quel 
campo del DB. Non ne voglio altri personalizzabili dall'utente ovviamente 

 campo del DB.
In che modo li hai inseriti?


 In che modo li hai inseriti?
Nell'unico modo che conosco:
            Combo18.AddItem "A"
            Combo18.AddItem "V"
            Combo18.AddItem "C"
            Combo18.AddItem "T"
            'Seleziona il primo elemento della combobox
            Combo18.ListIndex = 0 

             Combo18.ListIndex = 0
Ok. Allora mi spieghi qual è il meccanismo attraverso il quale l'addnew
del recordset va a influire sulla proprietà text del combo?


 del recordset va a influire sulla proprietà text del combo?
Vediamo se riesco a spiegarmi meglio.
Io sono partito da quest'agenda elettronica trovata sul sito di HTML.it : 
http://programmazione.html.it/guide/lezione/1398/unagenda-elettronica-con-vb-linterfaccia/
Se guardi la prima figura cerco di spiegarmi su come funziona:
Dove c'è scritto Agenta ai suoi lati ci sono delle freccie. In auromatico 
leggendo il DB Access i campi sottostanti vengono compilati.
Io ho aggiunto un'altra casella con la qualifica della persona, ed invece 
che un Text ho creato una Combo.
 Quando la form parte carica il primo elemento presente nel DB ed 
automaticamente compila quei TEXT e Anche la combo.
Quando si vuole aggiungere un nuovo elemente al DB su clicca sul pulsante 
Aggiungi, a questo punto vengono resettate tutti gli spazi e portati a "" in 
modo da semplificare l'inserimento. Una volta compilato il tutto si clicca 
sul tasto salva.
Il problema si presenta quando clicco su aggiungi. Infatti il tasto 
aggiungi:
Private Sub Command2_Click()
    If Command2.Caption = "Aggiungi" Then
        'Attiva la funzione di aggiunta.
        Data1.Recordset.AddNew  'CREDO CHE SIA QUESTO CHE GENERI L' 
"ECCEZIONE"
        Command2.Caption = "Annulla"
        Command6.Visible = True
            Text10.Visible = True
            Text11.Visible = True
            Text12.Visible = True
            Text13.Visible = True
            Text14.Visible = True
            Text15.Visible = True
            Text16.Visible = True
            Text17.Visible = True
            Combo18.Visible = True
    Else
        'Annulla le modifiche.
        Data1.Recordset.CancelUpdate
        Command6.Visible = False
        Command2.Caption = "Aggiungi"
            Text10.Visible = False
            Text11.Visible = False
            Text12.Visible = False
            Text13.Visible = False
            Text14.Visible = False
            Text15.Visible = False
            Text16.Visible = False
            Text17.Visible = False
            Combo18.Visible = False
    End If
End Sub
Lui infatti resettando il campo e non riuscendo a farlo...........
Aspetta aspetta, ideona.......
Quell'istruzione vuole resettare il campo e portarlo a "" ma essendo in sola 
lettura non riesce.....
....e se aggiungendo alla combobox anche il campo "" ......potrebbe 
funzionare.....
Purtroppo No, mi ero illuso ma non funziona nemmeno inserendo lo spazio 
vuoto all'interno della lista della combo.
Sinceramente non so proprio più che pesci pigliare. 

 Sinceramente non so proprio più che pesci pigliare.
Se noti infatti quando in Style metti 2 - Combo list, in automatico 
all'opzione Text di quel combobox analizzato ti mette il nome che gli hai 
assegnato e se provi a moficare quel campo di Text ti da appunto l'errore 
che esce a me.
Credo quinche che con l'ADDnew cerchi di cambiare il campo combo.text 
ricevendo appunto l'errore 

 Io sono partito da quest'agenda elettronica trovata sul sito di HTML.it :
http://programmazione.html.it/guide/lezione/1398/unagenda-elettronica.
..


 ha scritto nel messaggio 
news:1169651478.2...@a34g2000cwb.googlegroups.com...
Se il tuo problema è solo di non far visualizzare niente nella combo
devi solo impostare la proprietà listindex=-1
No io voglio che l'utente si obbligato a scegliere tra le opzioni che io ho 
inserito. Il problema è che se scelgo com Style Combo List, ricevo 
quell'errore, quando si cerca di inserire nuovi elementi nel DB

 ha scritto nel messaggionews:1169651478.2...@a34g2000cwb.googlegroups.com...


 ha scritto nel messaggio 
news:1169654427.3...@13g2000cwe.googlegroups.com...
[cut]
Per farlo devi :
1) andare nella tabella in visualizzazione struttura
2) cliccare sul campo di riferimento
3) mettere un valore predefinito tra le proprietà in basso (NB: deve
essere un valore presente nella combo)
Ho aperto il DB con access. Vado su Tabelle, poi Rubrica.
Tasto destro del mouse su visualizzazione Struttura.
Seleziono il campo incriminato (che non è ovviamente la chiave del DB).
In basso a sinistra mi visualizza alcune proprietà
Valore Predefinito: " "  (" " è presente nella combobox).
Salvo ed esco.
Controllo ed ora quando clicco su aggiungi non ricevo più quell'errore. 
Purtroppo se clicco su annulla, senza aver salvato il problema ritorna.
In pratica adesso il problema è solo su questa parte:
If Command2.Caption = "Aggiungi" Then
...
Else
        'Annulla le modifiche.
        Data1.Recordset.CancelUpdate
        Command6.Visible = False
        Command2.Caption = "Aggiungi"
          Combo18.Visible = False
    End If
Sei stato comunque un grande, abbiamo fatto notevoli passi avanti. Resta 
solo adesso quest'ultimo piccolo problemino
Grazie


 Grazie
Dimenticavo, quest'ultimo problema sembra verificarsi, solo se in prima 
posizione del DB esiste un contatto che ha uno spazio vuoto. Ma forse x' era 
stato salvato con valori personali e non presenti quindi nella combobox.
Infatti inserendo con la nuova procedura i nuovi utenti il problema non si 
manifesta più.
Purtroppo pero' si manifesta ancora quando clicco sul tasto Elimina Utente 
dalla Rubrica:
Private Sub Command4_Click()
    Dim Risposta As Integer
    'Chiede conferma prima di procedere con l'eliminazione.
    Risposta = MsgBox("Eliminare i dati correnti?", vbQuestion + vbYesNo, 
Me.Caption)
    If Risposta = vbYes Then
        'Elimina i dati.
        Data1.Recordset.Delete
        'Si sposta nel record precedente.
        Data1.Recordset.MovePrevious
    End If
End Sub
Come mai?

 > GrazieDimenticavo, quest'ultimo problema sembra verificarsi, solo se in prima


Data1.Recordset.MovePrevious
Immaginavo che fosse quello il problema, perchè capitava solo se cancellavo 
il primo elemento del DB.
Perfetto. Peccato solo che in questo modo ad ogni cancellazione anche in 
mezzo al DB mi torna al primo elemente del DB.
E se mettessi una cosa di questo tipo:
if Data1.Recordset.MovePrevious = null then  'In pratica se non esiste un 
elemento prima
Data1.Recordset.MovePrevious
Else
Data1.Refresh
end if
Questa sopra a causa di Data1.Recordset.MovePrevious = null  non funzionerà 
mai, ma se solo capissi con cosa sostituirlo sarebbe comodissimo non 
trovate?