www.mikrocontroller.net

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


Autor: Saugnapf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
int i;

switch (i)
{
  case Radiobuttonmaximieren->Selected 
     Zahl 1 in die Datei Schreiben
  case Radiobuttonminimieren->Selected 
     Zahl 2 in die Datei Schreiben
  case Radiobuttonverkleinern->Selected 
     Zahl 3 in die Datei Schreiben
}

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

Saugnapf

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

Bewertung
0 lesenswert
nicht lesenswert
Saugnapf wrote:

> Könnte man es so machen? Pseudocode:

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

Autor: Saugnapf (Gast)
Datum:

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

Autor: Saugnapf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: noch ein gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Radiobutton->Selected == GetCheck

Autor: Saugnapf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht 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:
String handshakeStr = "...";

...

Handshake handshake = Handshake.None;
if ( handshakeStr.CompareTo("XOnXOff") == 0 ) {
    handshake = Handshake.XOnXOff
} else if ( handshakeStr.CompareTo(...) == 0 ) {
    ...
}
...

Gruß
Markus

Autor: Saugnapf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Der Alte (Gast)
Datum:

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

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

Bewertung
0 lesenswert
nicht 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

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.