Avatar billede Lasse Novice
11. december 2001 - 17:19 Der 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!

Hvad goer jeg forkert?
Avatar billede jpk Nybegynder
11. december 2001 - 17:24 #1
Er din member en CEdit?

Avatar billede jpk Nybegynder
11. december 2001 - 17:45 #2
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();
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CTestDlg)
    DDX_Text(pDX, IDC_EDIT, m_Edit);
    DDV_MyValidation(pDX, m_Edit);
    //}}AFX_DATA_MAP
}
Avatar billede Lasse Novice
11. december 2001 - 17:50 #3
jepper.
Avatar billede Lasse Novice
11. december 2001 - 17:55 #4
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?
Avatar billede jpk Nybegynder
11. december 2001 - 18:11 #5
Ud af ren nysgerrighed; hvorfor vil du gerne undgå at bruge membervariabler af anden type end kontrollens?

Avatar billede Lasse Novice
11. december 2001 - 18:18 #6
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)...
Avatar billede Lasse Novice
11. december 2001 - 18:34 #7
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)
Avatar billede Lasse Novice
11. december 2001 - 18:40 #8
det er vist den attribute der hedder:

pDX->m_bSaveAndValidate

Takker for svaret....

men en sidste ting... ved du hvorfor det ikke virker det andet jeg var igang med?
Avatar billede jpk Nybegynder
11. december 2001 - 19:25 #9
Hmm, jeg kan ikke lige huske hvad der sker med SetSel, men mit gæt er at der faktisk bliver lavet en selection, den vises bare ikke grafisk...

Avatar billede jpk Nybegynder
11. december 2001 - 19:26 #10
Og ja, der er membervariablen m_bSaveAndValidate der angiver om det er data eller kontrollen der opdateres.

Avatar billede jpk Nybegynder
11. december 2001 - 19:36 #11
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!

Avatar billede Lasse Novice
11. december 2001 - 23:05 #12
ja, det er en god ide....

takker for svaret jpk... du er der jo hvert gang jeg skal have hjaelp ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester