counter erhöhen
-
Hallo,
Ich hab gerade auf eine Form1 einen Button und ein Edit Feld gesetzt.
Nun SOLL ^^ folgendes passieren.
Wenn man das erste mal auf den Button klickt soll eine 1 im Edit Feld stehen, beim 2ten klick auf den Button eine 2 und bis zur unendlichkeit und noch viel weiter XD
ne scherz reicht wenn das bis ca. 4 oder so hoch zählt^^
void __fastcall TForm1::Button1Click(TObject *Sender) { String counter=0; Edit1->Text=StrToInt(counter+1); }Aber mein Source Code is dumm das kann ja net gehen

Hat wer eine Idee wie das geht?
-
Hallo
Du must doch nur noch den Wert von counter aus dem Edit lesen bevor du es erhöhst
int counter=StrToIntDef(Edit1->Text, 0); Edit1->Text = IntToStr(counter +1);bis bald
akari
-
Naja gut mit einem String kann man auch schlecht zählen.
Kennst du den Datentyp integer ?
Davon eine static oder besser eine private Membervariable counter anlegen und die bei jedem Klick hochzählen und anzeigen lassen.
-
int counter=StrToIntDef(Edit1->Text, 0); Edit1->Text = IntToStr(counter +1);Da passiert aber das selbe wie bei meinem Source Code ...
-
was genau passiert denn eigentlich bei deinem Quellcode und was bei dem von Akari? wobei der Quellcode von Akari genau das macht was du wolltest...
-
Bei mir:
Ich klicke auf den Button im Edit Feld steht eine 1.
Bei akari:
Ich klicke auf den Button im Edit Feld steht eine 1.
-
Linnea möchte, dass du mal nachvollziehst, was der Code selbst macht.
Also quasi den Code nach Deutsch übersetzen. Dann sollte dir eigentlich klarwerden, warum das Ergebnis so ist, wie es ist.
-
Ich weiss doch wieso das s ist -.-
counter+1 = 1
es wird halt um eins erhöht beim ersten klick
-
Kann mir den keiner sagen wie das geht

-
Hallo
Ich habe dir doch schon den kompletten korrekten Code geschrieben, den du nur noch in deine Button-Methode kopieren must. Was stört dich daran?
bis bald
akari
-
wtf jetzt gehts eben ging es net.
ich hab einfach den c builder nochmal neu gestartet.
ty für die hilfe
-
<nörgel>
Auch wenn es trivial ist. Die Lösung von akari ist ja zum einen nicht ganz korrekt, da ja das TEdit "manipuliert" werden kann.
Und es wird hin und her gecastet.
</nörgel>static int counter = 0; Edit1->Text = IntToStr(++counter);
-
Wozu das static? Das verändert den Scope richtig? Dann bleibt der Variableninhalt bis zum nächsten Funktionsaufruf erhalten sagt die Hilfe. Ist das besser als ne private-Membervariable? Oder egal?
-
Das static bewirkt nur das die Variable noch dem verlassen des Scopes nicht aus dem Speicher entfernt wird.
Die Variable existiert aber trotzdem nur in diesem Scope. Von einer anderen Methode aus kannst du darauf nicht zugreifen.
Bei einer Membervariable kannst du von jeder deiner Methoden auf die Variable zugreifen. Sie wird erst gelöscht wenn der Destruktor deiner Klasse aufgerufen wird.
-
Hallo
außerdem hast du eine statische Variable genau einmal pro Klasse, eine (nichtstatische) Membervariable aber pro Klasseninstanz.
bis bald
akari
-
Hmm... mit dem unterschiedlichen Zugriff auf static-Variable und private-Membervariable ist jetzt klar, Danke. Aber das kann doch nicht Alles sein?
Jetzt kam grad akari's Post:
Was ne Klasse ist weiß ich ja, nur mit dem Begriff "Klasseninstanz" tu ich mich schwer... Ich lese so oft von Instanzen, aber so richtig begriffen hab ich's noch nicht.
-
Hallo
// Klasse wird deklariert class Klasse { }; // Instanz von Klasse mit Namen "instanz" wird deklariert und initialisiert Klasse instanz; // Noch eine Instanz derselben Klasse Klasse instanz2;bis bald
akari
-
Cool, Danke! Das ist ja einfach - wenn ich also eine Klasse vererbe, ist die neue Klasse ein Instanz der Ursprungsklasse... Dann weiß ich doch worum es geht

Wenn ich also eine static-Variable in einer Klassenmethode definiere und die Klasse dann vererbe (instanziiere?), greift die Methode der Klasseninstanz auf dieselbe Variable zu wie die Ursprungsklasse (selbe Speicherstelle). Ich kann somit den Inhalt einer Variablen auch vererben. Im Gegensatz dazu wird eine Member-Variable neu angelegt (zusätzliche Speicherstelle). Right? Hab ichs?
-
Hallo
Vererbung hat mit Instanzierung nichts zu tun. Wo siehst du in meinem Code eine Vererbung?
bis bald
akari
-
Ne mit vererben hat das ganze hier noch garnichts zu tun.
Selbst wenn du deine Klasse vererbst kannst du niemals den Inhalt der Membervariablen vererben.
Du definierst in deiner Klasse deine Variable counter.
Dann kannst du 1000 Klassen instanzieren und hast dann insgesamt auch 1000 verschiedene Counter, die nur in der eigenen Instanz gültig sind.