Avatar billede netro Nybegynder
12. oktober 2004 - 15:35 Der er 34 kommentarer og
1 løsning

Aflæs værdi af formularfelt fra en medlemsfunktion

Hvordan aflæses værdien af et formularfelt fra en medlemsfunktion?

Jeg forsøger med "Felt_navn->Text", men får at vide, at "Felt_navn" ikke er defineret.

Jeg bruger C++ Builder 5.
Avatar billede jakobdo Ekspert
12. oktober 2004 - 16:16 #1
Hvad med:

Form1->Felt_navn-Text
Avatar billede netro Nybegynder
12. oktober 2004 - 17:22 #2
Det virker. Tak :)
Avatar billede netro Nybegynder
12. oktober 2004 - 17:50 #3
Og vist alligevel ikke. Den compiler fint nu, men når jeg kalder medlemsfunktionen, der skal hente værdien, får jeg fejl i knappens event, hvor funktionen kaldes.
Avatar billede jakobdo Ekspert
12. oktober 2004 - 22:29 #4
Jeg er ikke helt med på hvad du forsøger at gøre!

Du har lavet en form, hvor du ønsker at trækker en værdi ud ikke?
Eller forsøger du at trækker værdier ud fra en anden form?
Eller har du lavet en ekstra cpp-fil, hvor du vil ændre/aflæse værdien i felt_navn->text?
Avatar billede netro Nybegynder
12. oktober 2004 - 23:58 #5
Jeg har en .h-fil indeholdende en klasse med tilhørende medlemsfunktioner. Fra disse vil jeg gerne aflæse/indsætte data fra/i formularen, der befinder sig på et TabSheet på formen. Hjalp det?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 09:02 #6
Ja, så skal du i din h fil, include unit1.h eller hvad du måtte kalde den kode som "indeholder" FORMULAREN.
Avatar billede netro Nybegynder
13. oktober 2004 - 11:03 #7
Det har jeg gjort. Filens top ser således ud:

//---------------------------------------------------------------------------

#include <vcl>
#pragma hdrstop

#include "Default.h"

using namespace std;

//---------------------------------------------------------------------------

(Klasser...)
Avatar billede jakobdo Ekspert
13. oktober 2004 - 11:05 #8
Så ved jeg ikke rigtigt hvad der er problemet.
Kan du evt vise di kode?
Avatar billede netro Nybegynder
13. oktober 2004 - 11:08 #9
Programmet er ikke særligt stort endnu, men det bliver nok lidt uoverskueligt alligevel at poste her. Kan jeg sende projektet til dig og give lidt flere points?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 11:09 #10
Du har ikke nøde at give flere point, men send det evt til: jakob-FJERN-do@hotmail.com

Du skal huske at slette: -FJERN-
Avatar billede netro Nybegynder
13. oktober 2004 - 11:13 #11
Nej, men det vil jeg gerne for den ekstra ulejlighed. Du har det lige om lidt.
Avatar billede netro Nybegynder
13. oktober 2004 - 11:24 #12
Hmm... Jeg får alle mails til denne adresse tilbage i hovedet.
Avatar billede jakobdo Ekspert
13. oktober 2004 - 11:43 #13
jakobdo at hotmail.com
Avatar billede jakobdo Ekspert
13. oktober 2004 - 11:44 #14
Hov, hvor stor er emailen?
Avatar billede netro Nybegynder
13. oktober 2004 - 11:45 #15
1,39MB (der er et par billeder også).

Alternativt kan jeg bare sende dig koden i plain text?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 11:53 #16
Du har ikke et sted du kan uploade koden?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 12:01 #17
Prøv evt at pak det ned uden billeder...
Og du har ikke nøde at sende: .tds filen med...
Mener kun jeg skal bruge

.cpp
.h
.bpr
Avatar billede netro Nybegynder
13. oktober 2004 - 12:10 #18
Jo, du får den her i stedet:

http://www.opfinderen.dk/Exp.zip
Avatar billede netro Nybegynder
13. oktober 2004 - 12:12 #19
Når programmet køres, så tryk blot på "Login" og derefter "Opret". Her opstår fejlen.
Avatar billede jakobdo Ekspert
13. oktober 2004 - 12:42 #20
I stedet for at bruge:
kundenummer=Form_Default->Edit_Kundenummer->Text; //Her går det galt!!!

Hvorfor så ikke lave funktioner ala:

bool setKundenummer(String sKundeNr)
{
  kundenummer = sKundeNr;
  return true;
}

Og ligeledes med fornavn og efternavn?
Avatar billede netro Nybegynder
13. oktober 2004 - 12:46 #21
Altså en række frie funktioner som setKundenummer og getKundenummer?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 12:48 #22
Jep! Så kan du også bedre kontrollere hvad som puttes i din klasse! :o)
Avatar billede netro Nybegynder
13. oktober 2004 - 12:52 #23
Du vil så kalde funktionerne med formular-værdien som parameter?

setKundenummer(Edit_Kundenummer->Text);

- men er det ikke mere hensigtsmæssigt at lave dem som medlemsfunktioner, så jeg kan tildele de private variabler i klassen værdien?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 12:59 #24
Hvis du laver en funktion ala:

bool setKundenummer(String sKundeNr)
{
  kundenummer = sKundeNr;
  return true;
}

Så kan du jo genbruge den klasse andetsteds...
Hvis du laver en funktion, som bruges form1->edit1->text...
Så skal feltet altid hedde det, for at din klasse kan bruges!
Avatar billede netro Nybegynder
13. oktober 2004 - 13:02 #25
Jeg er vist ikke helt med. Hvordan kalder du denne funktion så?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 13:04 #26
Du skal lave funktionen som en metode i din klasse!

Så du kan kalde den via:

k.setKundeNummer(form1->edit1->text)
k.setFornavn(form1->edit2->text)
k.setEfternavn(form1->edit3->text)
k.gemkunde();
Avatar billede netro Nybegynder
13. oktober 2004 - 13:12 #27
Så forstår jeg. Men grunden til, at jeg ville aflæse dem fra medlemsfunktionen, var at jeg så ville spare nogle funktionskald. Jeg har nemlig brug for at lave alle ovenstående kald to forskellige steder (ved tryk på hver sin knap)...
Avatar billede jakobdo Ekspert
13. oktober 2004 - 13:14 #28
Ok, hvis du skal kunne tilgå form1 controller direkte fra din klasse, så ved jeg ikke rigtigt hvordan det skal gøres! :o(
Avatar billede netro Nybegynder
13. oktober 2004 - 13:16 #29
Det behøver jeg heller ikke nødvendigvis. Jeg kan måske brygge lidt videre på din idé.

Hvordan undgår jeg i øvrigt denne fejl?
"Cannot convert 'AnsiString' to 'const char *'"

Den fremkommer ved:
Application->MessageBox("Brugeren "+fornavn+" er oprettet!", "Fejl", MB_OK);

- og variablen "fornavn" skal være af typen String (ikke char*). Kan jeg konvertere den?
Avatar billede jakobdo Ekspert
13. oktober 2004 - 13:19 #30
Der kan du lave dette:

AnsiString output;
output = "Brugeren " + fornavn + " er oprettet!";
Application->MessageBoxA(output.c_str(), "Oprettet", MB_OK);

Eller:
Application->MessageBoxA(AnsiString("Brugeren " + fornavn + " er oprettet!").c_str(), "Oprettet", MB_OK);
Avatar billede netro Nybegynder
13. oktober 2004 - 13:35 #31
Det virker perfekt.

Hvis jeg må tillade mig at stille et sidste spørgsmål, så har jeg undret mig en del over denne advarsel:
"Cannot create pre-compiled header: code in header"
- der peger på starten af min første frie funktion i den seperate h.fil.
Avatar billede jakobdo Ekspert
13. oktober 2004 - 13:38 #32
Jeg er blank sorry! :o/
Avatar billede netro Nybegynder
13. oktober 2004 - 13:39 #33
Okay. Men mange tak for alt din hjælp :)

Husk at lægge et svar.
Avatar billede jakobdo Ekspert
13. oktober 2004 - 13:39 #34
Svar...
Avatar billede jakobdo Ekspert
13. oktober 2004 - 14:13 #35
Takker...
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