Forum: PC-Programmierung RadioButtons mit switch-case anweisung.


von Saugnapf (Gast)


Lesenswert?

Guten tag,

Ich programmier mit VC++ 2005 .Net und habe folgendes Problem. Auf 
meiner Form habe ich 3 RadioButtons. Ich will, dass wenn man den einen 
Button auswählt, wir die Form maximiert, beim 2ten minimiert und beim 
dritten verkleinert.
Aber ich wollte auch, dass wenn man die form schließt und wieder öffnet, 
dass dann immer noch der Zustand da ist, wie man ihn zuletzt hatte.

Also: Man maximiert die Form, dann schließt man das Programm, öffnet es 
wieder und die Form ist immer noch maximiert. Bei den anderen eben der 
andere Zustand.

Um den zustand "abzuspeichern" wollte ich den Wert, 1 
(Radiobuttonmaximieren), oder 2 (Radiobuttonminimieren) oder 3 
(RadioButtonverkleinert) in die Textdatei schreiben und beim 
erneutenöffnen wieder laden lassen.

Ich weiß schon, wie das geht mit der textdatei, jedoch habe ich keinen 
Plan wie ich jetzt jedem Radiobutton einen der 3 Werte (1,2,3) zuweisen 
kann.

Könnte man es so machen? Pseudocode:
1
int i;
2
3
switch (i)
4
{
5
  case Radiobuttonmaximieren->Selected 
6
     Zahl 1 in die Datei Schreiben
7
  case Radiobuttonminimieren->Selected 
8
     Zahl 2 in die Datei Schreiben
9
  case Radiobuttonverkleinern->Selected 
10
     Zahl 3 in die Datei Schreiben
11
}

Ich wäre für jede Lösung dankbar,

Saugnapf

von Karl H. (kbuchegg)


Lesenswert?

Saugnapf wrote:

> Könnte man es so machen? Pseudocode:

So könnte man das machen.
Gibt es ein Problem mit dieser Lösung?

von Saugnapf (Gast)


Lesenswert?

Ja, ich finde kein member des Radiobuttons, das die funktion von 
Radiobutton->Selected hat. (Radiobutton->Selected gibt es auch nicht.)

von Saugnapf (Gast)


Lesenswert?

Gibt es denn einen Befehl/Member das so ewas macht, oder kann man eine 
Radiogroupbox erstellen und dann per index abfragen welcher Radiobutton 
gedrückt wurde? Wenn ja, wie macht man dann so etwas?

Saugnapf

von noch ein gast (Gast)


Lesenswert?

Radiobutton->Selected == GetCheck

von Saugnapf (Gast)


Lesenswert?

OK, danke, es läuft jetzt.

Allerdings habe ich jetzt ein weiteres Problem. Es ist zwar ein anderes, 
aber ich schreibe es trotzdem hier rein. Ich habe auch eine serielle 
Schnitstellenkomponente eingebaut. serialPort1->... Meine Frage:

serialPort1 hat die Handshake-komponente. Das ist das 
übertragungsprotokoll. XOnXoff usw. Wie kann ich aber jetzt dem 
serialPort im Programm eine andere Protokollart zuweisen? Ich habe es 
schon probiert die "neue" Protokollart in ein String zu convertieren, in 
einen wide charackter, aber immer kommt die Meldung, z.B.
Konvertierung des Parameters 1 von 'System::String ^' in 
'System::IO::Ports::Handshake' nicht möglich

Mit welchem befehl kann man denn jetzt den String "Protokoll" in den 
"Datentyp" "Handshake" convertieren?
Ich hoffe ihr könnt mir auch in diesem Fall helfen,

Gruß, Saugnapf

von Markus V. (valvestino)


Lesenswert?

Hi Saugnapf,

der Datentyp Handshake ist eine Enumeration. Diese basieren auf 
ganzzahligen Werten, ähnlich wie ein int. Eine direkte Umwandlung von 
String nach Handshake ist deshalb nicht möglich. Du kannst Dir aber mit 
einem if-else if-Konstrukt, vielleicht sogar mit einem switch-case 
behelfen. Ob letzteres unter C++ klappt, weiß ich nicht, unter C# geht 
es:
1
String handshakeStr = "...";
2
3
...
4
5
Handshake handshake = Handshake.None;
6
if ( handshakeStr.CompareTo("XOnXOff") == 0 ) {
7
    handshake = Handshake.XOnXOff
8
} else if ( handshakeStr.CompareTo(...) == 0 ) {
9
    ...
10
}
11
...

Gruß
Markus

von Saugnapf (Gast)


Lesenswert?

Hallo,
Es funktioniert jetzt. In VC++ muss man es so machen:  (Beispiel mit 
XOnXOff)

serialPort1->Handshake = System::IO::Ports::Handshake::XOnXOff;

Vielen Dank für eure antworten,

Gruß,

Saugnapf

von Der Alte (Gast)


Lesenswert?

Das mit dem doppelten Doppelpunkt hat mich schon
immer erstaunt: geht das wirklich ? In FORTRAN auch ?

von Karl H. (kbuchegg)


Lesenswert?

Der Alte wrote:
> Das mit dem doppelten Doppelpunkt hat mich schon
> immer erstaunt: geht das wirklich ?

Ja. Das ist ganz normales C++
Links vom Namespace steht der Klassenname bzw der Name
eines Namespace

> In FORTRAN auch ?

Mein letztes Fortran ist zwar schon lange her aber damals
gab es in Fortran keine Namespaces

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.