[C#] Keyboardstate vergleichen

Seiten: 1
michiptg
Verfasst am: 10.03.2012 um: 16:30 Uhr
 
Cw Posting Dude
Poster Teufel
CwID: 154382
Beiträge: 122
SPAM:
0% Spam
Hallo liebe CwCity-Community,

ich hab ein Problem mit C#, und zwar möchte ich an 2 Zeitpunkten ein Abbild der Tastatur machen und diese dann vergleichen.
Mein Code sieht bis jetzt so aus:
Ach ja, es ist eine Windows-Forms Anwendung 

http://mili-programme.bplaced.net/ccode01.txt 

Wenn ich eine Taste drücke, passiert aber nix .

Die "Key-Preview" hab ich schon auf "true" gesetzt.

<samp>Hoffe mir kann jemand helfen.
Vielen Dank schon mal im Vorraus! 



Mit freundlichen Grüßen
 

michiptg

Alenan.com





Letzte Änderung am: 10.03.2012 um:16:39 Uhr durch: michiptg
 



consider
Verfasst am: 10.03.2012 um: 16:57 Uhr
 
Dr. CwCity.de
Community God
CwID: 157538
Beiträge: 3942
SPAM:
0% Spam
Du vergleichst da Zwei Objekte miteinender. Die Können garnicht gleich sein, da es ja eben unterscheidliche Objekte sind, auch wenn sie die gleichen Eigenschaften haben.

== oder =! prüft auf Referenzgleichheit. In deinem Fall ist diese immer false


Mit .equals() prüfst du auf Wertgleichheit

kb1.equals(kb2);

Ach übrigens hat das Keyboard Objekt doch ne isKeyDown() Methode. Wäre das nicht sionniger für deinen Zweck?

-------------

Regeln für gutes Softwaredesign



  1. Wiederverwendung von Code ist besser als Duplizierung.

  2. Daten kapseln.

  3. Immer gegen Schnittstellen, möglichst nicht gegen konkrete Implementierungen programmieren.

  4. Schnittstellen erweiterbar halten.

  5. Keine monolithischen Strukturen.

  6. Vererbung sorgt für starre Strukturen. Objektkompostitionen sind flexibler.

  7. Auf lose Kopplung der Klassen achten. Feste Abhängigkeiten zwischen einzelnen Klassen vermeiden. 


PHP Design Patterns, 2. Auflage von Stefan Schmidt. O'Raily Verlag. ISBN 3-89721-864-2

-----------------

Letzte Änderung am: 10.03.2012 um: 17:04 Uhr durch: consider
 

michiptg
Verfasst am: 10.03.2012 um: 17:31 Uhr
 
Cw Posting Dude
Poster Teufel
CwID: 154382
Beiträge: 122
SPAM:
0% Spam
@consider: Bei der isKeyDown() Methode muss ich ja jede Taste einzeln vergleichen (das ist mir dann doch zu viel Arbeit).
Hab auch die Equals-Methode ausprobiert, die funktioniert auch nicht .

Ich hab inzwischen weitergemacht und da ist mir aufgefallen dass das mit "!=" bei MouseState funktioniert.


Mein aktueller Code:

using Microsft.Xna.Framework.Input;


        KeyboardState ks1;


        Microsoft.Xna.Framework.Input.Keys[] pks1;


        MouseState ms1;


 


        private void button1_Click(object sender, EventArgs e)


        {


            // 5 Sekunden Pause


            System.Threading.Thread.Sleep(5000);


 


            // Abbild 1


            ks1 = Keyboard.GetState();


            ms1 = Mouse.GetState();


 


            backgroundWorker1.RunWorkerAsync();


        }


 


        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)


        {


            while (true)


            {


                //Abbild 2


                KeyboardState ks2 = Keyboard.GetState();


                MouseState ms2 = Mouse.GetState();


 


                //Pruefung


                bool taste = ks1.Equals(ks2);


                if (taste == false)


                {


                    this.BackColor = Color.Red;


                    MessageBox.Show("Taste!");


                    break;


                }


 


                if (ms1 != ms2)


                {


                    this.BackColor = Color.Red;


                    MessageBox.Show("Maus bewegt!");


                    break;


                }


            }


        }

 



Mit freundlichen Grüßen
 

michiptg

Alenan.com



 

consider
Verfasst am: 10.03.2012 um: 17:48 Uhr
 
Dr. CwCity.de
Community God
CwID: 157538
Beiträge: 3942
SPAM:
0% Spam
Achso, auch beim Keyboard muesste immer der Text angezeigt werden. Es stimmt also schon wo anders etwas nicht. Da wird dir wohl der debugger besser sahgen können, wo was vom Plan abweicht.

Natürlioch ist objektreferenz1 =! objektreferenz2 immer True und somit die Bedingung immer war, es sei den beide Referenzen verweisen auf das selbe Objekt. Das tun sie bei dir aber nie.


Edit: Und machs doch nich so kompliziert:

if(ks1.equals(ks2){} Ist doch viel einfacher.

-------------

Regeln für gutes Softwaredesign



  1. Wiederverwendung von Code ist besser als Duplizierung.

  2. Daten kapseln.

  3. Immer gegen Schnittstellen, möglichst nicht gegen konkrete Implementierungen programmieren.

  4. Schnittstellen erweiterbar halten.

  5. Keine monolithischen Strukturen.

  6. Vererbung sorgt für starre Strukturen. Objektkompostitionen sind flexibler.

  7. Auf lose Kopplung der Klassen achten. Feste Abhängigkeiten zwischen einzelnen Klassen vermeiden. 


PHP Design Patterns, 2. Auflage von Stefan Schmidt. O'Raily Verlag. ISBN 3-89721-864-2

-----------------

Letzte Änderung am: 10.03.2012 um: 17:52 Uhr durch: consider
 

michiptg
Verfasst am: 10.03.2012 um: 18:16 Uhr
 
Cw Posting Dude
Poster Teufel
CwID: 154382
Beiträge: 122
SPAM:
0% Spam
Habs jetzt so:


if (!ks1.Equals(ks2))


{


this.BackColor = Color.Red;


MessageBox.Show("Taste!");


break;


}

Es kommt aber immernoch keine MsgBox.
Bei der MousState funktionierts komischer Weise.

Den Satz " Da wird dir wohl der debugger besser sahgen können, wo was vom Plan abweicht. " versteh ich nicht ganz wo und was soll mir der Debugger sagen? Im Ausgabe-Fenster steht leider nichts hilfreiches 
 



Mit freundlichen Grüßen
 

michiptg

Alenan.com



 

consider
Verfasst am: 10.03.2012 um: 18:19 Uhr
 
Dr. CwCity.de
Community God
CwID: 157538
Beiträge: 3942
SPAM:
0% Spam
Setz dir einen Braekpoint an die erste relevante Stelle. 
Gehe dann Schrittweise das Programm durch und überprüfe, wann in welcher variable was steht und wann das Programm wo hin springt.

Irgendwas scheint da grundsätzlich nicht hin zu hauen, nicht nur der Vergleich.

-------------

Regeln für gutes Softwaredesign



  1. Wiederverwendung von Code ist besser als Duplizierung.

  2. Daten kapseln.

  3. Immer gegen Schnittstellen, möglichst nicht gegen konkrete Implementierungen programmieren.

  4. Schnittstellen erweiterbar halten.

  5. Keine monolithischen Strukturen.

  6. Vererbung sorgt für starre Strukturen. Objektkompostitionen sind flexibler.

  7. Auf lose Kopplung der Klassen achten. Feste Abhängigkeiten zwischen einzelnen Klassen vermeiden. 


PHP Design Patterns, 2. Auflage von Stefan Schmidt. O'Raily Verlag. ISBN 3-89721-864-2

-----------------
 

michiptg
Verfasst am: 10.03.2012 um: 19:39 Uhr
 
Cw Posting Dude
Poster Teufel
CwID: 154382
Beiträge: 122
SPAM:
0% Spam
Hmmm, ich kriegs immer noch nicht hin .

Bin mit meinem Latein eh schon am Ende.

@Consider: Weiß nicht so recht was mir das sagen soll . Übrigens es funktioniert jetzt nur manchmal bei der ENTER-Taste.



Mit freundlichen Grüßen
 

michiptg

Alenan.com



 

tuts4you
Verfasst am: 19.03.2012 um: 13:34 Uhr
 
Cw Guru
King
CwID: 164600
Beiträge: 648
SPAM:
0% Spam
Ums nicht unbeantwortet zu lassen:
Weiss nicht wies bei XNA ist aber unter WinForms kann man nur Tastenkombinationen mit STRG und ALT + einer sonstigen Taste vergleichen. Um quasi ein Abbild zu vergleichen musst du alle gedrückten Tasten zwischenspeichern und dann vergleichen.
Zur veranschaulichung hab ich noch n Tutorial erstellt:
http://tuts4you.de/77-programmieren/168-c-tastaturstatus-vergleichen- tasten-keystate-vergleichen


Schau doch mal vorbei bei http://tuts4you.de :)
 

 
Seiten: 1

Folgende User sind hier gerade aktiv:
-

ANZEIGE