Toon posts:

[C++ Builder] ComboBox

Pagina: 1
Acties:

Verwijderd

Topicstarter
HEt is misschien een simpel probleem maar ik heb echt geen idee waarom dat het gebeurd dus kan ook niet achter de oplossing komen misshcien jullie wel??

Het probleem.
Ik selecteer een directory.
Op dat moment wordt de combobox gevuld met files uit die directory.
nu wil ik de regel die geselecteerd is opslaan in een file.
dat gaat goed.

ook wanneer ik de file weer uitlees en de regel weer terugzet in de combobox is er niks aan de hand.

De file is nu ingelezen voordat ik het scherm geopend heb.
wanneer ik het scherm geopend heb en de nieuwe instellingen wil opslaan. (doormiddel van een save and exit knop) moet ik eerst opnieuw de al geselecteerde file selecteren anders slaat het programma de regel op.

voorbeeld:
directory: test bevat file: tester

open scherm
ik selecteer directory test.
"tester" wordt in de combobox gezet.
ik sla op en "tester" staat in file.

->herstart het programma.
->laad de file in.

===============werkt niet =============================
open scherm.
"tester" staat in combobox
andere instellingen veranderd dus opslaan is nodig.
ik sla op en "tester" wordt niet in de file gezet.

==============werkt wel===============================
open scherm
"tester" staat in combobox
andere instellingen veranderd dus opslaan is nodig.
selecteer "tester" nogmaals uit de combobox
sla op en "tester" staat in file.

hieronder staat de methode voor het opslaan voor de regels uit de combobox
code:
1
2
3
4
                File->Lines->Add("#COMBOBOX");
                File->Lines->Add(ComboBox->Items->Strings[ComboBox->ItemIndex]);

                File->Lines->SaveToFile(directory+ "\\" +fileName);


kan iemand mij vertellen wat hier misgaat en waarom het niet werkt wanneer ik niet eerst de regel selecteer?!?!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Wat gaat er precies mis? Ik snap het niet goed.

https://fgheysels.github.io/


Verwijderd

Topicstarter
wanneer de tekst "tester" ingeladen is in de combobox en ik probeer (na andere dingen aangepast te hebben) in edit velden. alle instellingen op te slaan in een file. alle edit velden slaat hij wel op.
MAAR:
de tekst in de combobox slaat hij alleen op als ik die tekst nogmaals geselecteerd heb.
dus: tekst: "tester" is ingeladen in combobox. wanneer ik de inhoud van de combobox bekijk en de tekst: "tester" OPNIEUW selecteer en opsla dan werkt het wel.
MAAR:
als ik zonder de tekst: "tester" OPNIEUW te selecteren opsla dan werkt het niet!

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je mag bij een combobox ook andere text invullen dan die in het uitklaplijstje staan. Als je alleen TCombobox.Text zet betekend het niet dat ook TCombobox.ItemIndex gezet wordt. Is dat niet je probleem?

Je moet dus TCombobox.ItemIndex ipv TCombobox.Text zetten. Het intypen van tekst of het selecteren uit de uiklaplijst zet het wel goed.

[ Voor 35% gewijzigd door LordLarry op 05-12-2002 10:47 ]

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
code:
1
2
input = "tester"
ComboBox->ItemIndex->input;


Dit is de methode die de tekst "tester" nu in de combobox zet!
Dat is toch goed?

[ Voor 16% gewijzigd door Verwijderd op 05-12-2002 10:53 ]


Verwijderd

Topicstarter
even iets uitvoeriger. sorry dat had idd meteen gekunt! :)

eerst doet hij dit: (omdat er meerdere bestanden in die directory kunnen staan)
code:
1
2
input = file                   // file is een variabele met de naam van de file
ComboBox->Items->Add(input);    // oorspronkelijk een hele lus die alle files inlaad!

vervolgens gebeurd er het volgende:
code:
1
2
3
4
5
6
for(k = 0; k < ComboBox->Items->Count; k++)
{
             if(ComboBox->Items->Strings[k] == fileName) //fileName is de naam ("tester") die opgehaald is uit de file.
             {
                           ComboBox->ItemIndex = k;
             }

Dus met andere woorden laad hij hier eerst de files in een comboBox, gaat daarna kijken welke file overeenkomt met de naam uit de projectfile. en zet deze als Itemindex.


Dat is toch goed?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ik neem aan dat ComboBox->Items->Add(input); een soort pseudo code is...

Ik weet niet zeker of je een AnsiString met == kan vergelijken, maar test het gewoon eens uit of ComboBox->ItemIndex = k; wel aangeroepen wordt.

Voorderest ziet dit gedeelte er wel netjes uit.

Kijk ook even in je save functie of ItemIndex nogsteeds wel gezet is.

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
LordLarry schreef op 05 December 2002 @ 11:15:

Ik weet niet zeker of je een AnsiString met == kan vergelijken, maar test het gewoon eens uit of ComboBox->ItemIndex = k; wel aangeroepen wordt.


AnsiString is in BCB == string in Delphi (voor zover ik me kan herinneren).
Je kan dus de ==, +, ... operators toepassen op dat type.

https://fgheysels.github.io/


Verwijderd

Topicstarter
owke maar we zijn er nu achter dat het inlezen goed gaat!
ben er inmiddels ook achter dat het dus misgaat bij het opslaan!

AnsiString test = ComboBox->Items->Strings[ComboBox->ItemIndex];

itemindex = -1
test = NULL
zodra test NULL is zal hij ook niks in de file opslaan.
waarom is test nou NULL???

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Omdat jouw itemindex op -1 staat, en er dus niets geselecteerd is in die combobox.

https://fgheysels.github.io/


Verwijderd

Topicstarter
idee's om dit op te lossen?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Debuggen. Het is gewoon een fout in jouw logica of een verkeerde veronderstelling. Dit is niet iets wat wij 123 voor je kunnen oplossen.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
owke toch bedankt allemaal ik zal wel eens kijken hoe ik dit op ga lossen

Verwijderd

Topicstarter
ik zal toch even nog de oplossing met jullie allemaal delen.
ProjectFile->Lines->Add(ComboBox->Text);

slaat de tekst wel iedere keer !! 8)7 8)7

nou ja weer wat geleerd ;)

greetz

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dat betekend dat de text die in ComboBox->Text staat nooit in ProjectFile->Lines heeft gezeten. Dat is niet zo vreemd dan dat ProjectFile->ItemIndex dan -1 geeft...

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1