Autore Topic: [RISOLTO] ComboBox.Index  (Letto 1044 volte)

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
[RISOLTO] ComboBox.Index
« il: 12 Febbraio 2011, 09:46:16 »
Ho valorizzato dei combo con questa funzione

Codice: gambas [Seleziona]
Public Function FCaricaCombo()
  
  Dim sql As String
  Dim hres As Result
  Dim hret As Result
  Dim hreu As Result
  
  With MSysCont.$hConn
    .Type = "sqlite3"
    .Host = MSysCont.sPercorso
    MSysCont.pConnetti()
    sql = "SELECT id, ragsociale FROM fornitori ORDER BY ragsociale;"
    hres = .Exec(sql)
    ComboBox1.Clear
    For Each hres
      ComboBox1.Add(hres!ragsociale, hres!id)
    Next
    MSysCont.pDisconnetti()
    .Type = "sqlite3"
    .Host = MSysCont.sPercorso
    MSysCont.pConnetti()
    sql = "SELECT id, codice, descrizione FROM codiva ORDER BY codice;"
    hret = .Exec(sql)
    ComboBox2.Clear
    ComboBox4.Clear
    ComboBox6.Clear
    ComboBox8.Clear
    For Each hret
      ComboBox2.Add(hret!codice & " - " & hret!descrizione, hret!id)
      ComboBox4.Add(hret!codice & " - " & hret!descrizione, hret!id)
      ComboBox6.Add(hret!codice & " - " & hret!descrizione, hret!id)
      ComboBox8.Add(hret!codice & " - " & hret!descrizione, hret!id)
    Next
    MSysCont.pDisconnetti()
    .Type = "sqlite3"
    .Host = MSysCont.sPercorso
    MSysCont.pConnetti()
    sql = "SELECT id, codice, conto FROM conti WHERE livello = 3 AND tipo = 2 ORDER BY codice;"
    hreu = .Exec(sql)
    ComboBox3.Clear
    ComboBox5.Clear
    ComboBox7.Clear
    ComboBox9.Clear
    For Each hreu
      ComboBox3.Add(hreu!codice & " - " & hreu!conto, hreu!id)
      ComboBox5.Add(hreu!codice & " - " & hreu!conto, hreu!id)
      ComboBox7.Add(hreu!codice & " - " & hreu!conto, hreu!id)
      ComboBox9.Add(hreu!codice & " - " & hreu!conto, hreu!id)
    Next
    MSysCont.pDisconnetti()
  End With  
  
End


Come potete vedere definisco sia il text che l'index, quando poi faccio la lettura con questo codice:

Codice: gambas [Seleziona]
Public Sub ComboBox3_Click()
  
  Dim sql As String
  Dim hres As Result
  Dim iRis As Integer
  
  If bOp > 0 Then  
    With MSysCont.$hConn
      .Type = "sqlite3"
      .Host = MSysCont.sPercorso
      MSysCont.pConnetti()
      sql = "SELECT * FROM conti WHERE id = " & ComboBox3.Index & ";"
      hres = .Exec(sql)
      If hres.Available = True Then
        Message.Info(hres.conto)
        Label15.Text = hres!conto
      Endif
      MSysCont.pDisconnetti()
    End With  
    dTotPar = dTotPar + fTot[0]
    TextBox24.Text = Format(dTotPar, "#.#0")
    If dTotDoc = dTotPar Then
      iRis = Message.Question("Il totale del documento è stato raggiunto. Chiudo il documento?", "Si", "No")
      If iRis = 1 Then
'        fSalvaDoc()
      Else
        TextBox15.SetFocus
      Endif
    Else
      TextBox15.SetFocus
    Endif
  Endif
  
End


non mi trova niente.
Perchè??? :hatecomputer:
« Ultima modifica: 12 Febbraio 2011, 23:05:46 da Taurus dei miracoli »
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: ComboBox.Index
« Risposta #1 il: 12 Febbraio 2011, 10:08:34 »
Ho fatto una verifica ulteriore.
Nel momento in cui valorizzo i combo con la funzione descritta sopra i valori dell'index sono corretti.

Nel momento in cui eseguo l'evento click sulla combo il valore di index è in ordine progressivo da 0 a n-1
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: ComboBox.Index
« Risposta #2 il: 12 Febbraio 2011, 17:37:08 »
Ho fatto una verifica ulteriore.
Nel momento in cui valorizzo i combo con la funzione descritta sopra i valori dell'index sono corretti.

Nel momento in cui eseguo l'evento click sulla combo il valore di index è in ordine progressivo da 0 a n-1
Non capisco cosa vuoi dire con valori di index corretti quando valorizzi. Tu valorizzi le ComboBox con ComboBox~.add.
la funzione ".add" agisce numerando gli elementi della List di appartenenza alla ComboBox in trattamento partendo sempre da 0, per cui quando stai caricando il primo elemento, esso sarà riferito da 0 e così via, fino all'ennesimo caricamento; allora il valore index di riferimento sarà n-1, come giustamente lo trovi al momento del click.
Ciao.
« Ultima modifica: 12 Febbraio 2011, 17:39:58 da Picavbg »
:ciao:

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: ComboBox.Index
« Risposta #3 il: 12 Febbraio 2011, 19:57:23 »
La guida di Gambas dice:

Codice: [Seleziona]
ComboBox.Add (gb.qt4)
SUB Add ( Item AS String [ , Index AS Integer ] )
Inserts an element in the popup list box.
If Index is specified, then the new item is inserted at the Index position, 0 being the first item.
If Index is not specified, the new item is inserted at the end of the list.

Da come capisco, se inserisco il valore Index, sono io che lo difinisco. Mentre invece se non lo specifico viene inserito in maniera progressiva.
Sbaglio? :(
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: ComboBox.Index
« Risposta #4 il: 12 Febbraio 2011, 22:39:31 »
La guida di Gambas dice:

Codice: [Seleziona]
ComboBox.Add (gb.qt4)
SUB Add ( Item AS String [ , Index AS Integer ] )
Inserts an element in the popup list box.
If Index is specified, then the new item is inserted at the Index position, 0 being the first item.
If Index is not specified, the new item is inserted at the end of the list.

Da come capisco, se inserisco il valore Index, sono io che lo difinisco. Mentre invece se non lo specifico viene inserito in maniera progressiva.
Sbaglio? :(

L'esempio riportato col commento ti dice chiaramente che, nella ComboBox.List, Index punta agli elementi della List cominciando dal I° elemento come elemento con n° progressivo 0, il II° con n° progressivo 1 e così via; poi ti dice anche che se tu decidi di inserire un elemento nuovo alla iV^ posizione nella ComboBox.List devi scrivere: ComboBox1.add[3], mentre se vuoi semplicemente aggiungere in coda alla ComboBox.List basta scrivere ComboBox1.add.
In quest'ultimo caso però occorre tenere presente la proprietà "Sorted" della ComboBox, perché se poni ComboBox1.sorted=False. la funzione ComboBox1.add porrà il nuovo elemento in coda alla lista, mentre se poni ComboBox1.sorted=True la funzione ComboBox1.add porrà il nuovo elemento nella posizione relativa all'ordine alfabetico degli elementi contenuti in quel momento nella ComboBox.List.
Spero di essermi espresso chiaramente. Ciao.
:ciao:

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: ComboBox.Index
« Risposta #5 il: 12 Febbraio 2011, 23:01:42 »
Ok, per fare quello che voglio devo utilizzare un array.
Grazie :(
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)