Autor Beitrag
Terrion28
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 06.03.10 20:39 
Hallo,

ich bin in C# ein absoluter Anfänger und bin momentan dabei, einiges auszuprobieren (in der Visual Studio 2008 Express Edition).

Dabei hätte ich mal eine Frage dazu, ob es eine Möglichkeit gibt, dass ich zum Beispiel nach dem Klicken eines Buttons die Info erhalten kann, welche Checkbox vorher aktiv war. Ich wollte also eigentlich drei Checkboxen auf der Oberfläche platzieren. Jede kann vom User ausgewählt werden. Wenn nun der sich ebenfalls auf der Oberfläche befindende Button gedrückt wird, soll eine MessageBox den Wert "1" liefern, wenn zuletzt die CheckBox1 aktiv war etc.

Gibt es so eine Möglichkeit in C#?

Für eine Antwort wäre ich sehr dankbar!!!

Viele Grüße
Terrion


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Sa 06.03.2010 um 20:13
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Sa 06.03.10 20:52 
Speicher doch einfach beim klicken jedenmal, welche gedrückt wurde. Deklariere eine globale Variable, z.B. ein Int. Und wenn jemand auf eine Checkbox drückt, speicherst du da die ID rein.
Terrion28 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 06.03.10 21:33 
Hallo,

vielen Dank für die Antwort!! Werde ich gleich mal ausprobieren!!

Einen schönen Abend noch

Terrion
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 07.03.10 12:40 
Normans Antwort kommt mir etwas missverständlich vor. Ich vermute, er meint etwas völlig Richtiges, benutzt aber z.T. unsaubere Begriffe.
user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Speicher doch einfach beim klicken jedenmal, welche gedrückt wurde. Deklariere eine globale Variable,

"global" ist unter .NET verpönt. Gemeint ist vermutlich "als Feld des Formulars".

user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
z.B. ein Int.

Wieso int? Wenn es um eine CheckBox geht, dann sollte diese Variable für eine CheckBox stehen. Oder spricht irgendetwas dagegen?

user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Und wenn jemand auf eine Checkbox drückt, speicherst du da die ID rein.

Eine ID gibt es für Controls überhaupt nicht. Aber innerhalb eines Formulars gehört zu jedem Control eine Variable (die ist üblicherweise, aber nicht immer identisch mit dem Namen des Controls), und die (d.h. deren Referenz) kann registriert werden.

An diese Variable kommst du über den sender bei jedem Event, z.B. beim Click:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
CheckBox lastCheckbox = null;
private void AllCheckBoxClick(object sender, EventArgs e)
{
   if (sender is CheckBox)
      lastCheckbox = sender as CheckBox;
}

Gruß Jürgen
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: So 07.03.10 16:33 
Zitat:
"global" ist unter .NET verpönt. Gemeint ist vermutlich "als Feld des Formulars".


Wenn wir gerade mal am Krümmelkacken sind... es gibt das "global" - Schlüsselwort, welches auf den Standardnamesspace verweist. Hat zwar eine völlig andere Bedeutung, als die, die ich verwendet habe, aber verpönt ist es deshalb nicht.

Mal davon abgesehen ist die Verwendung des Wortes "global" zum Bezeichnen einer prozedurübergreifend sichtbaren Variable aus meiner Sicht durchaus ligitim, weil kurz und verständlich. Zu mal es "globale Variablen" im Sinne von nicht-oo-Sprachen in C# überhaupt nicht gibt (außer man möchte das Singleton-Konzept als "globale Variable" beschimpfen). Also kann es syntaktisch im Sprachraum von C# auch keine Verwechslung geben. Also, wenn überhaupt wird die Verwendung des Wortes 'global' im Zusammenhang mit 'Variable' vermieden, um Programmierer der alten Schule nicht zu verwirren und zu unterstreichen, dass .NET objektorientiert ist.

Zitat:
Wieso int? Wenn es um eine CheckBox geht, dann sollte diese Variable für eine CheckBox stehen. Oder spricht irgendetwas dagegen?


Aus Performancegründen... Die Frage impliziert, dass Terrion etwas machen will, in Abhängigkeit davon, was vorher ausgewählt war. Jeder Checkbox eine eigendefinierte ID zugeben, ist relativ einfach. Man muss im Code nicht mal was definieren.

Die Frage ist nun, wie man, wenn man die Checkbox speichert, herausfindet, welche das nun war. Das würde man dann wahrscheinlich über den Namen machen. Ein String-Vergleich ist aber ewig langsamer als ein Int-Vergleich. Zumal das Casten von Sender ebenfalls doppelt soviel Zeit verplempert wie das zuweisen eines Int. Und überdies hinaus bringt der Verweis aud die andere Checkbox keine Punkte, da der Zugriff auf die andere Checkbox nicht gefordert war. Und ein Informationsmehrgewinn gibt es auch nicht.

Warum kompliziert, wenn es auch einfach geht.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 07.03.10 17:58 
user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Aus Performancegründen...
Öh, Performance :gruebel: ? Ich glaube, du bist im Thread verrutscht, hier wurde noch keine Schleife gepostet. Und wer hat überhaupt etwas von Strings gesagt?

user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Warum kompliziert, wenn es auch einfach geht.
Wüsste nicht, wie es einfacher aussehen soll als
ausblenden C#-Quelltext
1:
2:
3:
4:
if (lastCheckBox == myCheckBox)
  MessageBox.Show("Du hattest auf meine eine Checkbox geklickt!");
else if (lastCheckBox == anotherCheckBox)
  MessageBox.Show("Du hattest auf meine andere Checkbox geklickt!");

_________________
>λ=