www.mikrocontroller.net

Forum: PC-Programmierung Aktualisierung der checkbox mit Invoke


Autor: Klaus Frankler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen...

Ich habe eine grafische Oberfläche mit Visual Studio erzeugt die sich 
leider nicht mit meinen eigenen Methoden aktualisieren lässt.
Mit meiner checkbox kann ich den Wert "true" oder "false" einstellen. 
Diese Werte will ich aber mittels meine selbstdefinierten Methode 
setzen.
Das funktioniert aber nicht!
// Die button1_Click Methode funktioniert und setzt den Haken an der Checkbox !!

        private void button1_Click(object sender, EventArgs e)
        {  if(xy == 0)
           { SETBOX = true; xy = 1; } 
           else { SETBOX = false; xy = 0; }
                      
        }

// Die SetCheckBox Methode funktioniert nicht !!
    
    private void SetCheckBox()
    {   if(xy == 0)
        { SETBOX = true;  xy = 1; } 
        else { SETBOX = false; xy = 0; }
    }

       public bool M_SETBOX ;
    
       public bool SETBOX
        {
            get
            {
                return this.M_SETBOX;     
               
            }
            set
            {
                if (value != this.M_SETBOX)
                {
                    this.M_SETBOX = value;    
                    NotifyPropertyChanged("SETBOX");
                }
            }
        } 

     
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        } 

Beide Routinen stehe im selben Quelltext. Jetzt vermute ich das mein 
Bildschirm mit der Methode SetCheckBox nicht aktualisert wird. Ich habe 
gelesen das man mit Invoke das Bild aktualisiern kann.
Hat jemand von Euch eine Ahnung wie das funktioniert ?
Was muss ich ändern, damit beide Routinen die selbe Funktion auslösen ?

Gruss Klaus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was treibst du denn da alles?
Generell ist es in den meisten Fällen unklug Daten parallel
zum eigentlichen Anzeigeelement in einem Dialog (oder Form)
zu halten.

Auf deinem Dialog (Form) ist doch die Checkbox vorhanden.
In deiner Dialog (Form) - Klasse gibt es daher ein Objekt
welches für diese Checkbox steht. Und dieses Objekt hat
Methoden um den momentanten Check-State abzufragen bzw. neu
zu setzen. Das Property SETBOX sollte sich daher direkt
an dieses Checkbox Objekt wenden, wenn es denn aktuellen
Zustand abholen will, bzw. den CheckState direkt in diesem
CheckBox Objekt setzen wenn ein neuer Wert gesetzt wird.
Es ist daher nicht notwendig (und wie gesagt in den meisten
Fällen unklug) sich da noch zusätzlich eine boolsche
Variable dafür zu halten. Was du da mit dem NotifyPropertyChanged
vorhast, ist mir ehrlich gesagt nicht ganz klar.

Und nein: Invoke löst ein ganz anderes Problem. Invoke brauchst
du nur dann wenn Multitasking ins Spiel kommt, weil die Controls
nicht threadsave sind und Veränderungen an einem Control immer
nur aus demselben Thread heraus gemacht werden sollen/dürfen,
in dem das Control auch erzeugt wurde. Mittels Invoke kann man
diesen Thread Wechsel erreichen.

Autor: Klaus Frankler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Ich möchte gerne die Checkbox über das Databinding verändern können.
Die Variable SETBOX ist mit der Checkbox über das Databinding mit 
einander verbunden. Jetzt müßte ich doch einfach den Wert von SETBOX auf 
"true" oder "false" setzen, damit diese Aktion ausgeführt wird. So ist 
mein Gedankengang.
Die Routine buttion1_Click war nur zum gegentest ob meine Funktion 
überhaupt funktioniert.
Mit der SetCheckBox() will ich die Werte verändern.

Das komische ist aber das die eine Routine funktioniert und die andere 
nicht!
Das heißt im Endeffekt, irgendetwas fehlt mir damit meine eignetliche 
SetCheckBox zu 100% arbeitet. Natürlich hast Du recht, ich kann den 
Zustand der checkbox1 auch einfach abfragen.

Aber mit der Kommunikation "Databinding" muss das doch auch gehen ?

Oder ?

Vielen Dank für Deine Mithilfe!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah. Databinding.
Dann bin ich raus. Davon verstehe ich nichts.

Autor: Klaus Frankler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok ! Danke trotzdem für Deine Mithilfe !!!

Vielleicht kennt sich noch jemand anders hier mit Databinding & Co 
aus...??

Autor: Bernd Hallinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

In der Property bei set nach dem zuweisen von Value

Invalidate();
Update();
aufrufen

Dann wird der Wert auch angezeigt!

Autor: Klaus Frankler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ! Danke für den Tipp !

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.