Labels weiterschalten
-
Halli
Hallo,ich habe 4 labels und einen button.
Ich möchte durch klicken auf den button zum 2. label und durch nochmaliges klicken zum 3.label und schließlich zum 4. label. Es soll nur der sichtbar sein, der eben in der Reihenfolge drankommt.
Verständlich???
Mein Werk:// Declarations added here will be included at the top of the .HPP file
class __Form1_declspec Form1 : public __Form1_Base { public: // add your public instance data here private: WBool _Set_Text(void); // add your private instance data here WInt _text_nr; WInt _DeuEng; WInt _um1; protected: // add your protected instance data here }; // Code added here will be included at the top of the .CPP file WBool Form1::_Set_Text(void) { if (_text_nr == 0 & _DeuEng == 0) { _um1 = 0;} if (_text_nr == 1 & _DeuEng == 0) {_um1 = 1;} if (_text_nr == 1 & _DeuEng == 1) {_um1 = 2;} if (_text_nr == 1 & _DeuEng == 2) _um1 = 3; switch (_um1) { case 0: cb_1->SetText( "Text weiterschalten" ); label_1->SetText( "" ); label_2->SetText( " Zweite Text Position" ); label_3->SetText( " " ); label_4->SetText( " " ); break; case 1: cb_1->SetText( "Text weiterschalten" ); label_1->SetText( "" ); label_2->SetText( "" ); label_3->SetText( " Dritte Position " ); label_4->SetText( " " ); break; case 2: cb_1->SetText( "Text weiterschalten" ); label_1->SetText( "" ); label_2->SetText( "" ); label_3->SetText( " " ); label_4->SetText( "Vierte Text Position " ); break; } return FALSE; } // Include definitions for resources. #include "WRes.h" Form1::Form1() { _text_nr = 0; //KONSTRUKTOR _DeuEng = 0; } Form1::~Form1() { } WBool Form1::cb_1_Click( WObject * source, WEventData * event ) { /* if (_text_nr == 0) _text_nr = 1; else*/ //_text_nr = 1; _Set_Text(); return FALSE; }
-
Du benötigst einen Zähler (vorzugsweise als Klassenmember), der bei jedem Klick hochgezählt wird:
WBool SetText() { _uml=(_uml+1)%4;//dadurch springt der Wert am Ende auf 0 zurück switch(_uml) { case 0: ... } }(übrigens, eleganter liese sich das lösen, wenn du statt vier label_... Variablen ein Array hättest - da kannst du mit einer for()-Schleife durchgehen und den "richtigen" Label setzen. Aber ich weiß nicht, ob dein Framework da mitmachen würde)
-
Danke für de Tipp, bin schon weitergekommen, nur eins:
ich habe ein Menue erstellt, beim click auf Start sollen mittels einer schleife(for) die labels einmal selbsttätig von label_1 bis label_4 wandern(sie sind im Kreis angeordnet).
Jeder label soll ca 1 Sekunde angezeigt werden und bei label_1 anhalten.// Declarations added here will be included at the top of the .HPP file
class __Form1_declspec Form1 : public __Form1_Base { public: // add your public instance data here private: WBool _Set_Text(void); // add your private instance data here WInt _text_nr; WInt _DeuEng; WInt _um1; WInt i; protected: // add your protected instance data here }; // Code added here will be included at the top of the .CPP file WBool Form1::_Set_Text(void) { /*if (_text_nr == 0 & _DeuEng == 0) { _um1 = 0;} if (_text_nr == 1 & _DeuEng == 0) { _um1 = 1;} if (_text_nr == 1 & _DeuEng == 1) { _um1 = 2;} if (_text_nr == 1 & _DeuEng == 2) {_um1 = 3; } */ _um1=(_um1+1)%4;//dadurch springt der Wert am Ende auf 0 zurück switch (_um1) { case 0: cb_1->SetText( "Text weiterschalten" ); label_1->SetText( "1 Text Position" ); label_2->SetText( " " ); label_3->SetText( " " ); label_4->SetText( " " ); break; case 1: cb_1->SetText( "Text weiterschalten" ); label_1->SetText( "" ); label_2->SetText( "2 Text Position " ); label_3->SetText( "" ); label_4->SetText( " " ); break; case 2: cb_1->SetText( "Text weiterschalten" ); label_1->SetText( "" ); label_2->SetText( "" ); label_3->SetText( " 3 Text Position " ); label_4->SetText( " " ); break; case 3: cb_1->SetText( "Text weiterschalten" ); label_1->SetText( " " ); label_2->SetText( " " ); label_3->SetText( " " ); label_4->SetText( "4 Text Position " ); break; } return FALSE; } // Include definitions for resources. #include "WRes.h" Form1::Form1() { _text_nr = 0; //KONSTRUKTOR _DeuEng = 0; i = 0; } Form1::~Form1() { } WBool Form1::menu_1_ErstePosition_Click( WObject * source, WEventData * event ) { label_1->SetText( "1 Text Position " ); label_2->SetText( " " ); label_3->SetText( " " ); label_4->SetText( " " ); if (_text_nr == 0 & _DeuEng == 0) { _um1 = 0;} return FALSE; } WBool Form1::menu_1_ZweitePosition_Click( WObject * source, WEventData * event ) { label_1->SetText( " " ); label_2->SetText( "2 Text Position " ); label_3->SetText( " " ); label_4->SetText( " " ); if (_text_nr == 0 & _DeuEng == 0) { _um1 = 1;} return FALSE; } WBool Form1::menu_1_DrittePosition_Click( WObject * source, WEventData * event ) { label_1->SetText( " " ); label_2->SetText( " " ); label_3->SetText( " 3 Text Position" ); label_4->SetText( " " ); if (_text_nr == 0 & _DeuEng == 0) { _um1 = 2;} return FALSE; } WBool Form1::menu_1_ViertePosition_Click( WObject * source, WEventData * event ) { label_1->SetText( " " ); label_2->SetText( " " ); label_3->SetText( " " ); label_4->SetText( " 4 Text Position" ); if (_text_nr == 0 & _DeuEng == 0) {_um1 = 3; } return FALSE; } WBool Form1::menu_1_Start_Click( WObject * source, WEventData * event ) { if (_text_nr == 0) _text_nr = 0; else //_text_nr = 1; for(_text_nr =1 ; _DeuEng<4; _text_nr ++ );////----------- >>>//ZAEHLSCHLEIFE _Set_Text(); return FALSE; } WBool Form1::cb_1_Click( WObject * source, WEventData * event ) { if (_text_nr == 0) _text_nr = 0; else _text_nr = 1; _Set_Text(); return FALSE; }
-
if(_text_nr==0) _text_nr=0;Wat soll der (sorry) Quatsch? Wenn die Variable bereits 0 ist, brauchst du sie nicht noch auf 0 zu setzen.
for(_text_nr =1 ; _DeuEng<4; _text_nr ++ );Das ist genauso unnötig - damit bekommst du je nach Startwert von _DeuEng entweder einen noop oder eine Endlosschleife.
Ansonsten sieht mir dein Code auch reichlich verworren aus. Die _Set_Text()-Methode kümmert sich schon selber darum, daß der Text bei jedem Aufruf um einen Schritt weiterspringt - also mußt du sie nur in einer Schleife so oft aufrufen, wie du es benötigst:
while(/* beliebiges Abbruchkriterium */) { _Set_Text(); // warte etwas }PS: Variablennamen mit _ sind "böse".
PPS: Wenn du Probleme mit deiner Oberfläche hast, solltest du dich mal im Fachforum deines Compilers (was für einer erstellt denn so ein Codegerüst?) umsehen.
-
CStoll schrieb:
if(_text_nr==0) _text_nr=0;Wat soll der (sorry) Quatsch? Wenn die Variable bereits 0 ist, brauchst du sie nicht noch auf 0 zu setzen.
for(_text_nr =1 ; _DeuEng<4; _text_nr ++ );Das ist genauso unnötig - damit bekommst du je nach Startwert von _DeuEng entweder einen noop oder eine Endlosschleife.
Ansonsten sieht mir dein Code auch reichlich verworren aus. Die _Set_Text()-Methode kümmert sich schon selber darum, daß der Text bei jedem Aufruf um einen Schritt weiterspringt - also mußt du sie nur in einer Schleife so oft aufrufen, wie du es benötigst:
while(/* beliebiges Abbruchkriterium */) { _Set_Text(); // warte etwas }PS: Variablennamen mit _ sind "böse".
PPS: Wenn du Probleme mit deiner Oberfläche hast, solltest du dich mal im Fachforum deines Compilers (was für einer erstellt denn so ein Codegerüst?) umsehen.
Danke für Deine Mühe, aber ich check nicht ganz was Du meinst!

Warum sind Variablennamen mit _ böse? Es wurde mir so beigebracht!Der Text soll ja nicht bei jedem Aufruf um einen Schritt weiterspringen - sondern vom ersten label bis zum 4.label erscheinen, beim ersten anfangen und sobald es beim 4. angekommen ist, stoppen

-
Renate schrieb:
Warum sind Variablennamen mit _ böse? Es wurde mir so beigebracht!
Laut Standard dürfen Namen, die mit _ beginnen, vom Compiler für interne Zwecke missbraucht werden. Deshalb solltest du als Programmierer lieber die Finger davon lassen.
(mal ganz abgesehen von der Tatsache, daß der Unterstrich die Lesbarkeit deines Programms nicht gerade erhöht)Der Text soll ja nicht bei jedem Aufruf um einen Schritt weiterspringen - sondern vom ersten label bis zum 4.label erscheinen, beim ersten anfangen und sobald es beim 4. angekommen ist, stoppen

Da mußt du halt dein Abbruchkriterium richtig setzen

-
CStoll schrieb:
PS: Variablennamen mit _ sind "böse".
Nein, nicht generell. Und die Regeln bezüglich reservierter Bezeichner sind auch nicht allzu schwer.