[VC++] Edit control uitlezen gaat fout

Pagina: 1
Acties:

  • TheGhostInc
  • Registratie: November 2000
  • Niet online
De vraag ziet er "te" simpel uit, maar hij is iets complexer:

Ik heb een dialog en daarop staan een partij-tje controls die ik met een leuke subroutine uitlees en in een serie variabelen zet.

Nu gaat het goed zo lang ALLE velden ingevuld zijn, maar zodra er 1 veld niet is ingevuld besluit VC spontaan dat ik geen enkel veld meer kan invullen.
Het is (afaik) geen array knoppen en zijn ook geen group.

Het is origineel een VB form. die ik heb geimporteerd, alle namen zijn goed gezet (geen dubbele oid.)

Het gaat echt meteen fout, want als ik met een pop-up box de data meteen weergeef dan is die in het ene geval leeg en in het andere geval keurig gevuld.

[edit: code toegevoegd]
code:
1
2
intStrLengte = m_ctrKlantEdit.GetLine(0,strBuffer);
strBuffer[intStrLengte]='\0';

En als ik de data even weergeef doe ik dat gewoon met:
code:
1
AfxMessageBox(strBuffer);

  • superboer
  • Registratie: September 2001
  • Laatst online: 10-08-2021
dus als ik het goed begrijp (sorry maar ik heb de vraag vaak moeten overlezen, zal wel door het weer komen, en nu snap ik hem nog niet helemaal)

je hebt dus een dialog-box met daarin een aantal velden die je kunt invullen, vul je alles helemaal in dan gaat het goed en zie je alles mooi in een messagebox staan, vul je de helft in dan zie je niks in de messagebox staan !

dat lijkt me toch gewoon een fout in je functie die alle controls uitleest ????

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Niet helemaal, als ik alles invul kan ik elke waarde laten zien in het messagebox (ik lees ze dus echt apart in)
Als ik er 1 niet in vul kan ik de rest gewoon NIET uitlezen.
Dus het volgende werkt wel:
code:
1
2
3
4
EditControlA bevat string 'woei'
EditControlB bevat string 'woeiwoei'
Lees controlA, en toon:
woei

En dan werkt het volgende niet:
code:
1
2
3
4
5
EditControlA bevat string 'woei'
EditControlB bevat string '' 
Lees controlA, en toon:

(en dan staat er dus niks)

Is het nu wel duidelijk wat mijn probleem is?

[ Voor 0% gewijzigd door TheGhostInc op 01-08-2002 13:54 . Reden: Code was enigszin onduidelijk " doet het niet. ]


  • superboer
  • Registratie: September 2001
  • Laatst online: 10-08-2021
Yup volkomen duidelijk ! :)

Hmmmm dat is een heel vaag probleem ?!

En in de rest van je code doe je verder niks speciaals met die controls ?

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


  • DolleDries
  • Registratie: Oktober 2000
  • Laatst online: 26-05 08:16
de editboxen zijn waarschijnlijk geen multiline editboxen.
Dus kan je er ook geen multiline editbox getline opdracht op los laten.
Gebruik gewoon een gettext commando...

Waarschijnlijk zijn je trubbels dan gesolved.. :)

  • TheGhostInc
  • Registratie: November 2000
  • Niet online
De rest van de code doet idd. niks met de controls.
Nu is het wel een geimporteerd form van Visual Basic.
Maar goed, alle andere dialogen zijn dat ook en hebben die problemen afaik niet.

  • Quorton
  • Registratie: Januari 2001
  • Laatst online: 31-05 14:12
Ipv GetLine() moet je GetWindowText gebruiken.
Maar je gebruikt MS Visual C++ ? Waarom gebruik je dan niet de classwizard, dan koppel je de edit control gewoon aan een string, klaar, hoef je er niet meer naar om te kijken.

Quadcore 6600 @ 3,3Ghz, 4 GB, 2 TB raid 5, GF 8400GS
P4 2.8G, 2 GB, 500GB diskspace, GF FX5200


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
gettext werkt niet met een CEdit (dat is de control die ik heb gebruikt)
Een CEdit is standaard multiline (maar dat kun je uitschakelen)

Vandaar dat ik dus met GetLine zit te werken.

  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Ik heb die dingen dus oorspronkelijk gekoppeld aan een String, maar continu is die string dus gewoon leeg, dan kom je al snel op deze oplossing uit.

BTW. GetWindowText is geen class member van een CEdit control, dus afaik gaat dat niet werken (heb de MSDN hier aanstaan) nu kan ik het mis hebben, maar ik denk dat dat dus over een andere control gaat.

[ Voor 0% gewijzigd door TheGhostInc op 01-08-2002 14:13 . Reden: toevoeging ]


  • Quorton
  • Registratie: Januari 2001
  • Laatst online: 31-05 14:12
CEdit is afgeleid van CWnd en heeft dus gewoon GetWindowText(), trust me.
Maar je hebt dus de classwizard wel gebruikt ?
Dan ozu het nog kunnen dat op het moment dat je je invoer gegevens wilt hebben, dat je dan eerst ff UpdateData(TRUE) aan moet roepen, dit zorgt ervoor dat de gegevens in de edit boxen naar de strings gekopieerd worden, normaal doet ie dit zelf elke seconde of zo, maar het kan zijn dat jij de gegevens wilt opvragen terwijl die update nog niet automatisch is aangeroepen

Quadcore 6600 @ 3,3Ghz, 4 GB, 2 TB raid 5, GF 8400GS
P4 2.8G, 2 GB, 500GB diskspace, GF FX5200


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Idd. ik ben de mist ingegaan toen ik een stuk moest maken met een multiline CEdit, toen ben ik overgestapt op GetLine.

Ik ga het nu even testen, en ik vond idd ook dat GetWindowText() gewoon bij een CEdit hoort (sterker nog, ik heb het regelmatig gebruikt... :) )

  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Ik heb eigenlijk nog een ander vraagje, ik heb een Listcontrol, hoe lees ik dat ding uit?
Kan iemand even de functie geven waarmee je de geselecteerde regel uitleest, ik krijg het niet voor elkaar.

  • superboer
  • Registratie: September 2001
  • Laatst online: 10-08-2021
hier een paar regeltjes uit mijn programma waar ik nu mee bezig ben en ook een CListCtrl gebruik.

code:
1
2
3
    POSITION pos=m_Adapters.GetFirstSelectedItemPosition();
    if((index=m_Adapters.GetNextSelectedItem(pos))!=-1)
    {


uitlezen :

gebeurt dmv GetItemText !

Staat toch gewoon in de MSDN ??

[ Voor 0% gewijzigd door superboer op 02-08-2002 10:59 . Reden: uitlezen er effe bijgezet ]

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Ja, zover was ik ook, maar hoe selecteer je nu de regel die je wil hebben?
Want over die POSITION struct kan ik dus geen info vinden.
(Alleen dat het een struct is, maar niet welke variabele oid het ding heeft)

Ik kan met GetItemText overigens wel alles uit de CListCtrl halen, maar ik weet
dus niet hoe ik die POSITION om moet zetten in iets waar ik iets mee kan.

  • superboer
  • Registratie: September 2001
  • Laatst online: 10-08-2021
uit MSDN :
POSITION A value used to denote the position of an element in a collection; used by MFC collection classes.
je hoeft POSITION helemaal niet om te zetten je kunt hem gewoon gebruiken :? hij bevat gewoon de positie van een elementje :?

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Ok, dan probeer ik het op deze manier:
Kan iemand de coderegel (COMPLEET) geven waarmee ik die regel kan uitlezen.

(Ik wil dus als iemand op een regel klikt dat ik kan uitlezen welke regel er geklikt is)

Mijn ;) VC vraagt bij GetItemText om 2x een int, of 2x int ,string en een int

  • superboer
  • Registratie: September 2001
  • Laatst online: 10-08-2021
Foei vragen om source code mag niet ! Daar leer je nix van !
:o ;)

maar omdat je zo liev vraagt ! :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
void CmyprogramDlg::OnOpenAdapter() 
{
    int index;
    POSITION pos=m_Adapters.GetFirstSelectedItemPosition();
    if((index=m_Adapters.GetNextSelectedItem(pos))!=-1)
    {
        Adapter.OpenInstance=PacketOpenAdapter(AdaptersInfo.SymbolicLink[index]);
        Packet=PacketAllocatePacket((LPADAPTER)Adapter.OpenInstance);
    }
    else
        AfxMessageBox(_T('No device selected!'));   
}


Bij mijn programma is het zo dat je eerst iets selecteerd in de lijst waarna je op een button drukt die boven deze functie zit :) (rare zin maarja)
en voila hij weet waar ie moet zijn !

Dit bedoel je toch wel eh ?? :?

[ Voor 0% gewijzigd door superboer op 02-08-2002 14:01 . Reden: de quotes effe veranderd :) (' moet " zijn) ]

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
uhm eigenlijk zocht ik meer naar de regelcode (1 regeltje maar ;) ) die als ik de positie heb, mij iets kan terug geven (een String ofzo), zodat ik daarna uit mijn gegevens kan uitzoeken welk veld is aangeklikt.

In jouw geval onthoud je dus alleen de index, en zoekt daarna in je array op welke adapter bij welke index hoort, right?

In mijn geval zou je bv. een lijstje krijgen (even jouw voorbeeld overnemen ;) )
in een listbox:
[Intel etherexpress 10/100]
[Xircom realport RBEM56/100]
[3com 905B]

En dan klik je bv. op [3com 905B], en dan wil ik ergens die String vandaan zien te halen.
(alles komt uit een DB, en dan moet ik alle gegevens gaan indexeren om de zaak terug te zoeken)

  • superboer
  • Registratie: September 2001
  • Laatst online: 10-08-2021
hmmm

Als je dan gewoon doet (mijn voorbeeld weer) :

code:
1
2
CString tekst;                
tekst=m_adapters.GetItemText(index,0);


En hierna bevat de variabele tekst toch "3com 905B" ?

* superboer vraagt zich trouwens af of TheGostInc toevallig ook met z'n stage bezig is ?

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
hehe, nee nog beter: werk ;)

Stage begint voor mij pas in September.
Maar ik zat gewoon verkeerd te denken, ik dacht dat met dat "GetNextSelectedItem" je alleen het 2de, 3de ... geselecteerde item kon opvragen, ik zal nu eens even proberen.

Offtopic:
Wat moet jij eigenlijk precies doen voor je stage?

Hehe, hij doet het gewoon,
blijf het vaag vinden van die "GetNextSelectedItem"
Mijn dank is GROOT

(roep maar als jij een keer iets nodig hebt)

[ Voor 0% gewijzigd door TheGhostInc op 02-08-2002 15:41 . Reden: Hij doet het ]


  • superboer
  • Registratie: September 2001
  • Laatst online: 10-08-2021
Offtopic reply :

Das geheim (serieus!) 8)

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !

Pagina: 1