options-button



  • Hallo an Alle, 🙂
    vielleicht kann mir helfen, bei diesem Code wird mittels options button zw. deutsch, engl. u. französisch ein label umgeschaltet bzw. es soll so passieren.
    Aber wenn ich auf franz. umschalten will, dann kommt beim zweiten klick die deutsche Sprache. Die anderen Umschaltungen funktionieren.

    class __Form1_declspec Form1 : public __Form1_Base
    {
    
        public:  // add your public instance data here
        private: // add your private instance data here
                WBool _Set_Text(void);
                WInt _text_nr;
                WInt _setFont;
                WInt _DeuEng;
                WInt _um1;
         WInt _DeuFra;
    
        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 == 0 & _DeuEng == 1)
            _um1 = 2;
      if (_text_nr == 1 & _DeuEng == 1)
            _um1 = 3;
    
      if (_text_nr == 0 & _DeuFra == 1)
            _um1 = 4;
      if (_text_nr == 0 & _DeuFra == 1)
            _um1 = 5;      
    
      switch (_um1)
        {
          case 0:
                label_text->SetText( "Dies ist der erste Text" );
                cb_1umschalt->SetText( "Zweiten Text anzeigen" );
          break;
           case 1:
                label_text->SetText( "Dies ist der  zweite längere Text" );
                cb_1umschalt->SetText( "Ersten Text ausgeben" );
           break;
           case 2:
                label_text->SetText( "This is the first text" );
                cb_1umschalt->SetText( "Show the second text" );
          break;
           case 3:
                label_text->SetText( "This is the second longer text" );
                cb_1umschalt->SetText( "Show the first text" );
          break;
            case 4:
                label_text->SetText( "Ceci est le premiere texte" );
                cb_1umschalt->SetText( "Indiquer le deuxieme texte" );
          break;
            case 5:
                label_text->SetText( "Ceci est le deuxieme plus long texte" );
                cb_1umschalt->SetText( "Indiquer le premiere texte" );
          break;
        }
      return FALSE;     
     }
    //  Include definitions for resources.
    #include "WRes.h"
    
    WBool Form1::Form1_Create(
        WObject *               source,
        WCreateEventData *      event )
    {
       optb_deutsch = 0;
       optb_englisch = 0; 
       optb_franzoesisch = 0;
    
        return FALSE;
    }
    
    Form1::Form1()                          // Konstruktor
    {
      _text_nr = 0;
      _setFont = 0;
      _DeuEng  = 0;
      _DeuFra  = 0;
    }
    
    Form1::~Form1()                         // Destruktor
    {
    
    }
    
    WBool Form1::menu_1_Umschalten_Click(
        WObject *           source,
        WEventData *        event )
    {
         /*if (_text_nr == 0)
            _text_nr = 1;
        else
            _text_nr = 0;
            _Set_Text();*/
     return FALSE;  
    }
    
    WBool Form1::menu_1_Beenden_Click(
        WObject *           source,
        WEventData *        event )
    {
        WAppObject.Quit();
        return FALSE;
    }
    
    WBool Form1::cb_1umschalt_Click(
        WObject *           source,
        WEventData *        event )
    {
        if (_text_nr == 0) {
            _text_nr = 1;
    
    } else if(_text_nr == 0) {
              _text_nr = 1; 
    
       } else
            _text_nr = 0;
            _Set_Text();
        return FALSE;
    }
    
    WBool Form1::checkbox_1_Click(
        WObject *           source,
        WEventData *        event )
    {
        if (_setFont == 0)
        {
           label_text->SetFont( WFont( "20.Arial.Bold" ) );
           _setFont = 1;
        }
        else
        {
            label_text->SetFont( WFont( "8.Arial.Bold" ) );
           _setFont = 0;   
        }
    
        return FALSE;
    }
    
    WBool Form1::optb_deutsch_Click(
        WObject *           source,
        WEventData *        event )
    {
        _DeuEng = 0;
        _Set_Text();
        return FALSE;
    }
    
    WBool Form1::optb_englisch_Click(
        WObject *           source,
        WEventData *        event )
    {
        _DeuEng = 1;
        _Set_Text();
     return FALSE;
    }
    
    WBool Form1::optb_franzoesisch_Click(
        WObject *           source,
        WEventData *        event )
    {
        _text_nr = 0;
        _DeuEng = 0;
        _DeuFra = 1;
    
        _Set_Text();
        return FALSE;
    }
    


  • if (_text_nr == 0 & _DeuFra == 1) 
      _um1 = 4;
    if (_text_nr == 0 & _DeuFra == 1)
      _um1 = 5;
    

    Vergleich doch mal die beiden Bedingungen hier - fällt dir etwas auf?



  • Hallo,
    die Ergebnisse der Bedingungen sind gleich (beide 1) das klappt nicht, nun hab ich weiter gearbeitet und mein Prog. mischt die Sprachen, d. h., dass beim ersten Klick zwar franz. erscheint, aber beim zweiten klick deutsch.
    Warum?
    HIER MEINE IF-CASEA

    if (_text_nr == 0 & _DeuFra == 0) 
         _um1 = 4; 
      if (_text_nr == 1 & _DeuFra == 1) 
         _um1 = 5;
    

    UND HIER SWITCH

    break;
           case 4:
                label_text->SetText( "Ceci est le premiere texte" );
                cb_1umschalt->SetText( "Indiquer le deuxieme texte" );
          break;
           case 5:
                label_text->SetText( "Ceci est le deuxieme plus long texte" );
                cb_1umschalt->SetText( "Indiquer le premiere texte" );
           break;
    

    HIER DER BUTTON

    WBool Form1::optb_franzoesisch_Click(
    	WObject *   		source,
    	WEventData *		event )
    {
    _DeuFra = 0;
    _Set_Text();
    
        return FALSE;
    }
    


  • Jetzt hast du eine Bedingung zu viel umgestellt - das erste dürfte lauten "if(_text_nr==0 && _DeuFra==1)".

    Btw, ich würde dir vorschlagen, den Code etwas neu zu strukturieren - eine if()-Serie, die nur den Arbeitszweig für einen anschließenden switch() festlegen muß, erscheint mir etwas -hmm- übertrieben.



  • das erste dürfte lauten "if(_text_nr==0 && _DeuFra==1)".

    Wobei das Augenmerk besonders auf das doppelte && zu richten ist 😉



  • Also ich raff's einfach nicht, denn die Ausgabesprachen werden immer noch gemischt
    . Obwohl ich Eure Tipps probiert habe, ich werd verrückt.
    _text_nr==0 && _DeuFra==1
    Also der label soll in den drei verschiedenen Sprachen 2 Versionen ausgeben, d.h., z. B. "Das ist der erste Text" und "Das ist der zweite längere Text"(auf deutsch, auf englisch->das war vorgegeben, und ich soll den dritten Button eingeben, eben französisch.
    Hilfe 😮



  • versuch's mal mit einer anderen Version:

    string strings[3][2]=
    {
      {"kurzer Text","dies ist ein langer Text"},
      {"short text" ,"this is a long text"},
      {...}
    };//bei der Reihenfolge bin ich mir nicht ganz sicher
    
    if(_DeuEng==1)
      select=1;
    else if(_DeuFra==1)
      select=2;
    else
      select=0;
    
    cout<<strings[select][_text_nr]<<endl;
    


  • 1. gaaaanz häßlicher code
    2. doppelte "_" vor bezeichnern mit nachfolgendem großen Buchstaben sind böse. sehr böse. so böse, dass nur Compilerhersteller sie verwenden dürfen.



  • wo siehst du doppelte _ _?????? 😕



  • CStoll schrieb:

    versuch's mal mit einer anderen Version:

    string strings[3][2]=
    {
      {"kurzer Text","dies ist ein langer Text"},
      {"short text" ,"this is a long text"},
      {...}
    };//bei der Reihenfolge bin ich mir nicht ganz sicher
    
    if(_DeuEng==1)
      select=1;
    else if(_DeuFra==1)
      select=2;
    else
      select=0;
    
    cout<<strings[select][_text_nr]<<endl;
    

    🙂 Hallo und danke,
    beim ersten Aufruf, zeigt das Formular die Ausgaben korrekt, so wie ich das will, aber und das ist das Tragische an der Sache, wenn ich dann die Button nochmal auswähle, also noch auf dem gleichen Formular sind alle Ausgaben FRANZÖSISCH!!!! UND WARUM??????????????



  • Beschäftige dich lieber mit den Grundlagen, bevor du mit GUI Programmierung beginnst, sonst bleibst du immer an so trivialen Problemen hängen.


Anmelden zum Antworten