Avatar billede hoko Nybegynder
18. maj 2003 - 16:48 Der er 9 kommentarer

Indsæt text i en Combobox

Jeg har lavet et popup dialog i et program. Hvor der blandet andet indgår en combobox hvor man skulle kunne vælge "1" el. "2". Jeg har lavet dialogen via Recources i Visual C++. Til dialogen har jeg jeg oprettet en class hvor jeg har nedarvet fra CDialog.
Problemmet er at jeg ikke kan få sat de to tal ind. Da jeg åbentbart skal bruge en CWnd pointer til at få adgang til den.
Nogen der kan hjælpe med hvordan jeg sætter de to tal ind og evt. hvordan jeg læser den igen bagefter når ::OnOK bliver kørt.
Avatar billede bertelbrander Novice
18. maj 2003 - 20:46 #1
I dialogens OnInitialDialog putter du:

CComboBox *cb = (CComboBox *)GetDlgItem(MY_COMBO_BOX);
ASSERT(cb);
cb->AddString("1");
cb->AddString("2");

Hvor MY_COMBO_BOX er ID'en på comboboxen.

I din OnOk funktion kan du putte:

CComboBox *cb = (CComboBox *)GetDlgItem(MY_COMBO_BOX);
ASSERT(cb);
int selected = cb->GetCurSel();
if(selected != LB_ERR)
{
  // Brugeren har valgt text index "selected"
}

Alternativt kan man bruge:

char temp[1029];
cb->GetWindowText(temp, 1029);

til at hente texten i comboboxen.

Jeg har ikke testet noget af ovenstående.
Avatar billede hoko Nybegynder
19. maj 2003 - 00:18 #2
Der kommer ikke nogen fejl meddelser, men der kommer heller ikke noget ind i comboboxen, så helt virker det ikke. Jeg ved ikke om det kan have noget med den Styles jeg har sat op. Jeg ville gerne have at det virkede som en drop list. Så der ikke var mulighed for at ændre i variablerne.
Avatar billede bertelbrander Novice
19. maj 2003 - 00:38 #3
Det burde virke, har du prøvet at trykke på den lille pil ned til højre i combobox'en, sker der noget? Eller trykke pil op/ned mens comboboxen har fokus.
Du kan evt prøve at se hvad retur værdien for kaldet til AddString er.
Og/eller tilføje:
cb->SelectString(-1, "1");
efter kaldet til AddString(); (hvis du har tilføjet strengen "1").
Skulle dette fejle kunne du prøve at sende den linie fra .rc filen hvor
combobox'en defineres.
Avatar billede hoko Nybegynder
19. maj 2003 - 07:42 #4
Det virker når man bruger piletasterne
Avatar billede jpk Nybegynder
19. maj 2003 - 07:58 #5
Du kan oprette en membervariable (via ClassWizard), så er det så simpelt at indsætte værdier som:

m_cb.AddString("1");

hvor m_cb er navnet på den membervariabel du har oprettet.
Hvis du ikke ved hvordan, skal jeg gerne forklare det...
Avatar billede hoko Nybegynder
19. maj 2003 - 08:32 #6
Det har jeg også gjort, dog ikke via ClassWizard, da jeg syntes den laver for meget man ikke kan se hvad er. JEg kan bedre lide at skrive min klasser fra bunden.
Avatar billede jpk Nybegynder
19. maj 2003 - 09:06 #7
Hvis du har en membervariabel, skal du da ikke bruge en CWnd-pointer til at sætte noget ind...
Avatar billede killer_bee Nybegynder
19. maj 2003 - 11:41 #8
Hvis de to værdier er faste dvs skal være i ComboBox'en altid, så gør det via properties på den combobox... i flappen som hedde values (tror jeg nok) du kan skrive 1 og tryk ctrl+enter så kommer du ned til den næste linje.. skriv 2 .. osv.
Avatar billede bertelbrander Novice
19. maj 2003 - 19:52 #9
Hvis det virker med piletasterne kunne det tyde på at din combobox er for lille. Den størrelse der angives er størrelsen når combobox'en er "foldet ud".
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