11. december 2001 - 17:19Der er
11 kommentarer og 1 løsning
Selekter noget i en select box
Jeg har en member control variable kaldet m_test.
Denne har jeg associeret med en edit box saaledesi DoDataExchange:
DDX_Control(pDX, IDC_SUBSERIE, m_test);
Jeg har nu skrevet noget i feltet, og trykker paa en ok knap. Jeg finder ud af at det som er skrevet i edit boksen ikke overholder reglerne. Jeg vil derfor gerne komme med en fejlmeddelelse(har jeg fundet ud af), og bagefter selektere det som staar i denne edit box. Det er DETTE som jeg ikke kan finde ud af.
Jeg proever dette, men det virker ikke:
m_test.SetSel(0,-1); //der kommer ingen fejl ved dette!
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Du bør lade en DDV_xxx funktion håndtere valideringen af din edit, så kan du bare kalde Fail() hvis værdien er ugyldig og fokus sættes så automatisk til den control det drejer sig om!
Fx:
void DDV_MyValidation(CDataExchange* pDX, CString strEdit) { // Som parameteren strEdit bruger du din CString member for edit-feltet if(strEdit.Find(\"A\") != -1) // Ex: A må ikke eksistere i feltet pDX->Fail(); }
ok, jeg kan bruge fail, hvilket ser udtil at vaere en smart loesning. MEN jeg vil gerne udenom at bruge de der member variable, og istedet bruge member control variable. Derfor: Hvad goer jeg forkert med det andet?
Det er fordi jeg gerne vil \"noejes med\" kun at lave control variablene. Jeg skal nemlig lave nogle flere ting med edit kontrollen, hvilket jeg skal bruge control variablen til. Det er egentlig kun for at spare mig for alle de variable. Med control variable kan jeg jo goere det hele(jeg kan dog ikke lige faa det til at virke... he he)
Anyway, kender du ikke lige hvordan det skal goeres, tror jeg at jeg bare opretter dem begge(control og \"normal\" variable)...
ok, jeg tror jeg holder mig til dit yderst laekre eksempel...
Men en lille sidste ting. Hvordan ved man om det er det funktionen bliver kaldt for at initialisering, eller om det er ved tryk pa ok knappen(validering)
Jeg er godt klar over at du kan gøre stort set hvad du vil hvis du har en member for selve kontrollen, men koden bliver absolut ikke pænere og der bliver heller ikke mindre af den!
Du kan prøve at kigge i filen DLGDATA.CPP der ligger under C:\\Program Files\\Microsoft Visual Studio\\VC98\\MFC\\SRC (Eller hvor du nu evt. har lagt det...) Her kan du se implementationen af DDX/DDV-funktionerne, for at få en ide om hvordan de virker. Du kan så lave en headerfil hvor du selv implementerer dine specialiserede DDX/DDV-rutiner, gemme den i en mappe med dine egne libs osv., sætte stien hertil i VC++ og så bare inkludere den hver gang du skal bruge funktionaliteten! Således behøver du kun lave det én gang!
takker for svaret jpk... du er der jo hvert gang jeg skal have hjaelp ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.