Forum: PC-Programmierung Aktualisierung der checkbox mit Invoke


von Klaus Frankler (Gast)


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!
1
// Die button1_Click Methode funktioniert und setzt den Haken an der Checkbox !!
2
3
        private void button1_Click(object sender, EventArgs e)
4
        {  if(xy == 0)
5
           { SETBOX = true; xy = 1; } 
6
           else { SETBOX = false; xy = 0; }
7
                      
8
        }
9
10
// Die SetCheckBox Methode funktioniert nicht !!
11
    
12
    private void SetCheckBox()
13
    {   if(xy == 0)
14
        { SETBOX = true;  xy = 1; } 
15
        else { SETBOX = false; xy = 0; }
16
    }
17
18
       public bool M_SETBOX ;
19
    
20
       public bool SETBOX
21
        {
22
            get
23
            {
24
                return this.M_SETBOX;     
25
               
26
            }
27
            set
28
            {
29
                if (value != this.M_SETBOX)
30
                {
31
                    this.M_SETBOX = value;    
32
                    NotifyPropertyChanged("SETBOX");
33
                }
34
            }
35
        } 
36
37
     
38
        public event PropertyChangedEventHandler PropertyChanged;
39
40
        private void NotifyPropertyChanged(String info)
41
        {
42
            if (PropertyChanged != null)
43
            {
44
                PropertyChanged(this, new PropertyChangedEventArgs(info));
45
            }
46
        }

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

von Karl H. (kbuchegg)


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.

von Klaus Frankler (Gast)


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!!

von Karl H. (kbuchegg)


Lesenswert?

Ah. Databinding.
Dann bin ich raus. Davon verstehe ich nichts.

von Klaus Frankler (Gast)


Lesenswert?

Ok ! Danke trotzdem für Deine Mithilfe !!!

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

von Bernd Hallinger (Gast)


Lesenswert?

Hallo

In der Property bei set nach dem zuweisen von Value

Invalidate();
Update();
aufrufen

Dann wird der Wert auch angezeigt!

von Klaus Frankler (Gast)


Lesenswert?

Hallo ! Danke für den Tipp !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.