inlezen meerdere editvelden

Status
Niet open voor verdere reacties.

pvdh1988

Gebruiker
Lid geworden
23 okt 2007
Berichten
7
hallo,

Ik ben bezig met een klein project, en ik moet daarbij van meerdere velden input van de gebruiker inlezen.

Ik kan dat doen op deze manier:
a[0] = StrToInt(Edit0->Text);
a[1] = StrToInt(Edit1->Text);
a[2] = ..
etc

Op zich is daar niets mis mee, maar het ziet er niet uit.
Weet iemand een manier om dit in te lezen mbv een for-loopje, of is er een makkelijkere manier om user-input in te lezen dan edit-velden??
alvast bedankt
 
#include <iostream>
using std::cin;

...

for( int i; i < n; ++i ) // n = lengte van de rij
cin >> a;

...

je kan ook via een buffer werken

char buff[128];

for( int i; i < n; ++i ) // n = lengte van de rij
{
cin >> buff;
a = atoi( buff ); // atoi( ) zet een string om naar een integer
}
 
Bedankt voor je reactie, maar misschien heb ik het niet goed uitgelegd
Het gaat er dus om dat er bijvoorbeeld 20 editvelden zijn waar je iets in kan voeren,

Mijn vraag is dus kan ik deze in een for-loop aanspreken, of kan ik beter een andere component gebruiken?
 
my bad, had blijkbaar niet goed genoeg gelezen:).

Edit0, Edit1, ... zijn zelfgekozen namen neem ik aan?
ge zou ze in een array kunnen steken

Datatype[] bla = new Datatype[20];

en dan ipv Edit0 bla[0] gebruiken, Edit1 bla[1] enz.

en dan een for luske

for ( int i = 0; i < n; ++i )
a = StrToInt( bla->Text );

zoiets dan? Ik weet niet juist wat ik moet verwachten van editvelden, zijn dit inputfields van gtk/qt of een zelfgedefinieerde klasse?

Anyway als ge een herhalingslus wilt gebruiken moet ge uw editfields groeperen in een array ( of gelinkte lijst ) ...

Ofwel ben ik compleet mis, zou ook kunnen :).
 
Een editveld is een standaardcomponent uit borland c++. Je kunt ze zeg maar op een form zetten, zodat het er voor de gebruiker wat beter uitziet.

Als je een editveld op een form hebt staan, kun je hem aanspreken met :

Edit1->...
Het is een klasse dus kun je allerlei properties gebruiken, zoals autosize,visible, color, width, etc etc.

Om dus meerdere velden tegelijk uit te lezen moet ik dus dit typen
Edit1->Text, Edit2->Text, ..... Edit50->Text. Hetzelfde moet ik doen als ik waardes wil laten zien, dus ook weer 50 regels code. Hierdoor krijg ik dus 100 regels code en dat wil ik dus juist niet. Ik wil dit dus in een loopje doen oid. Als dit niet kan, doe ik het maar op een smerige manier :(
 
Is het niet mogelijk om van deze edit's direct een array te maken.

In VB is dit wel mogelijk.
Bij het plaatsen van meerdere Editvelden wordt (in VB) meteen gevraagd of je hiervan een array wilt maken.

Kan zoiets niet in C++ ??????????

gr
corwin
 
Laatst bewerkt:
Ik ben er nog eens mee bezig geweest en het is me uiteindelijk, met wat hulp van iemand anders toch nog gelukt :p
De code spreekt eigenlijk voor zich.

Code:
  TEdit*EditArray[10];
  for(int i=0; i<10; i++)
  {
    EditArray[i] = new TEdit(ParentWindow);
    EditArray[i]->Left=20;
    EditArray[i]->Top=(30*i);
    EditArray[i]->Parent=Form1;
  }

ontzettend simpel eigenlijk :)
 
Simpel,
als je weet hoe, ja


Maar hoe kun je de tekst nu wijzigen, zonder de Edit controls aan te maken,
dus van op een form bestaande Edit controls in array ?

gr

Corwin
 
daarvoor zul je ze in een array moeten zetten(bijvoorbeeld bij je FormCreate), vervolgens kun je de editvelden benaderen zoals je ook een array ook benadert, zoiets:

Code:
  TEdit*Array[MAX];

  Array[0]=Edit1;
  Array[1]=Edit2;
  Array[2]=Edit3;
  Array[3]=Edit4;
  etc..

  for(int i=0;i<MAX;i++)
  {
    Array[i]->Text="aap";
  }
 
hehe

dit werkt,

bedankt

gr

Corwin

ps eigenlijk ook best simpel,
als je weet hoe.

ben beginner in C++
 
Laatst bewerkt:
Bij 3 of meerdere arrays van 20 is
Array[0]=Edit1;
Array[1]=Edit2;
Array[2]=Edit3;
Array[3]=Edit4;
niet zo'n elegante oplossing.

Kan ik dit op een of andere manier in een lus zetten ?

for (int i=0; i<20; i++)
{
Array="Edit"+(i+1);
}
// ik moet dus een feite de tekst Edit en de nummerieke waarde i+1 laten verwijzen naar een control
 
Dat was dus ook mijn originele vraag, en aangezien niemand dit weet neem ik maar genoegen met wat ik nu heb.
Dus eerst alle velden in een array gooien en van daaruit bewerkingen erop uitvoeren, werkt prima.

Als iemand het 'elegant' kan hoor ik het graag.
 
Hoe kun je zulk een array nu aanroepen vanuit een function?

(Array "aangemaakt" in main)
:confused:
 
Dat was dus ook mijn originele vraag, en aangezien niemand dit weet neem ik maar genoegen met wat ik nu heb.
Dus eerst alle velden in een array gooien en van daaruit bewerkingen erop uitvoeren, werkt prima.

Als iemand het 'elegant' kan hoor ik het graag.

Maak een 'Panel' hier genoemd Panel3, en zet hierop je Edit-velden:

{
// ShowMessage(Panel3->ControlCount);

for(int i=0; i<Panel3->ControlCount; i++)
{
TEdit *edit;
edit = (TEdit *)Panel3->Controls;
edit->Text = IntToStr(i);
}
}


// 't is me alleen niet duidelijk waarom de nummering juist omgekeerd is:
// in Edit0 komt bv 4; Edit1 3 enz (afh van het aantal Edit-velden)

gr Corwin.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan