none
Blöde Frage. Point und Boolean RRS feed

Alle Antworten

  • Hallo,
    überlegen wir mal was die beiden Typen eigentlich speichern:

    • Point: Koordinaten um einen punkt auf einer Fläche/Raum zu bestimmen
    • Boolean = Wahrheitswert: Ja (true) / Nein (false)

    So, und was soll da konvertiert werden können?

    Du kannst vielleicht einen bool-Wert ermitteln der aussagt ob der Punkt sich über der Fläche X liegt oder den Punkt auf X/Y festlegen wenn der Boolwert true ist. Mehr aber auch nicht.

    Eine richtige Konvertierung geht also nicht. Die Typen können nicht die Daten des jeweils anderen abspeichern. Siehe auch Vererbung. In .NET ist die einzige Gemeinsamkeit der Typen System.Objekt.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Dienstag, 17. September 2013 16:53
  • Hey

    Mein Spielfeld wird in der jeweiligen Größe dargestellt und zwar in Point. Einstellung erfolg durch Radiobutton.

    Die Speichervariable auf meiner Form1 heißt "Point groesse" und wird von der Form2 über "return rueckgabe" an die Form1 übergeben. Dies passiert in der Funktion/Methode "Point liefereWert()". Dort ist die Rückgabevarialble "Point rueckgabe". 

    Das ganze wird über Radiobuttons in der Form2 gesteuert, die ich über das Menütoolstrip "Spielfeld" aufrufe um dann die Größe über Radiobutton auswähle. Radiobutton sind aber vom Typ Boolean.

    Meine Idee ist es, die Variable "Point groesse" abzufragen welchen Wert sie gespeichert hat und dann darüber den jeweiligen Radiobutton als markiert zu setzen. Das heißt, wenn ich auf der "Form2" den Radiobutton mit dem Wert (640 * 480) auswähle und die Variable groesse mein Spielfeld auf diese Größe ändert, dann soll auch der Radiobutton markiert werden. Vielmehr soll er markiert bleiben. Soll heißen, wenn ich noch mal den Menüpunkt "Spielfeld" aufrufen, dann soll genau der Radiobutton markiert sein, den ich ausgewählt habe. 

    Darum diese Frage. 

    Gruß

    lempy


    Dienstag, 17. September 2013 17:20
  • Für sowas muss man dann eben mit if-Abfragen arbeiten:

    if(radioButton1.Checked)
    {
        Point1 = gcnew Point(640,480);
    }
    else ...

    Beim setzen der RadioButton genau anders herum (Größe abfragen > RadioButton entsprechend setzen).


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Dienstag, 17. September 2013 18:51
  • Hey Koopakiller

    Mit "if-Abfrage" hatte ich mir das schon gedacht, aber eben nicht so, wie in Deinem Beispiel. 

    Recht lieben Dank. Werde mich am Wochenende daran setzen und tüfteln. Melde mich dann wieder.

    Gruß

    lempy

    Mittwoch, 18. September 2013 18:26
  • Wenn du grundsätzlich bei den Radiobuttons eine Größenangabe als "Text" hast á la "640x400" oder "320x200", könntest du anstatt den Boolean-Wert von "Checked" zu übernehmen ja auch den "Text" parsen (splitten in 2 Teile, getrennt durch das x und dann in ein Array übernehmen, und dann aus dem Array(0) und Array(1) eine Pointstruktur aufbauen).

    Umgekehrt müsstest du dann in dem Ziel (idealerweise eine Groupbox, die deine Radiobuttons gruppiert) die Controls durchgehen und Radioboxen suchen, deren "Text"-Wert dann den gesuchten "PointX"+"x"+"PointY" entspricht, diese checken, und alle anderen unchecken.

    Dann hättest du deine etwas ungewöhnliche "Konvertierung" vollzogen. Das hat aber dann nix mit erben oder ableiten zutun, sondern eher mit Parsing.


    LG, Dennis.

    EDI Consultant/Developer

    Ich nutze meistens VB6 und VS2005 bis VS2012

    Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.

    Donnerstag, 19. September 2013 12:27
  • Hey Dennis,

    wollte mich gerade daran machen und ein wenig ausprobieren. Habe dann vorher noch mal hier rein gesehen und finde Deine Antwort, die sich auch gut "anhört" "liest".

    Doch kannst Du mir mehr über dieses Parsing erzählen? Habe davon schon viel im Internet gelesen aber nie so richtig verstanden was das ist oder worum es geht. 

    lieber Gruß 

    lempy

    Samstag, 21. September 2013 13:27
  • Parsing heißt nichts anderes, als das eine Zeichenfolge (Zahl, ...) nach einem bestimmten Kriterien zerlegt und die darin enthaltenen Daten interpretiert werden. Beispielsweise so:

    	String ^s = "480*640";
    	array<System::String ^>^ data = s->Split('*');
    	int^ height = Int32::Parse(data[1]);
    	int^ width = Int32::Parse(data[0]);

    Beim Abfragen des richtigen RadioButtons kannst du es wiederrum so machen:

    	for each ( Control^ control in Controls)//Anstelle aller Controls solltest du nur die eines Containerelements nutzen
    	{
    		if(control->GetType() == RadioButton::typeid)//Typ abprüfen
    		{
    			if(((RadioButton^)control )->Text->Equals(height+"*"+width))//Wird das richtige angezeigt?
    			{
    				((RadioButton^)control )->Checked = true;//Status setzen
    			}
    		}
    	}
    Beachte bei der ganzen Geschichte aber, wenn width und height Werte haben, die zu keinem RadioButton passen, das dann auch keiner gechecked wird. Standartmäßig sollte also ein RadioButton gechecked sein (Am Besten: Maximale Größe).

    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Samstag, 21. September 2013 14:26
  • Hallo Koopakiller

    So habe ich das noch nicht einmal in einen der Bücher gefunden. War eine große Hilfe für das Verständnis für das "Parsen?".

    Nur noch zur Abklärung, ob ich die Zeilen richtig verstanden habe:

    Hight und wigth sind die Höhe und die Breite des Fensters. Denke ich mal laut Übersetzung.

    Mit den Containerelements bin ich mir nicht ganz sicher. Meinst Du damit meine Radiobuttons in der Groupbox?

    Das String^ s = "480 * 640" würden dann die Namen meiner Radiobutton sein? Denn es müsste ja die Zeichenfolge beim Zerlegen und aus werten gefunden werden. Denke ich zu mindest.

    Vielen Dank für diese Hilfe und für Deine Antwort

    Gruß 

    lempy

    Samstag, 21. September 2013 18:20
  • Stimmt soweit. Height und width sind die Größe des Spielfesnters (Feld). Ein Containerelement ist ein Control, welches weitere Controls enthalten kann. Also kann es eine GroupBox, ein Panel aber auch die Form selbst sein. 480 * 640 ist dann die Beschriftung, genau.

    Wenn du noch Leerzeichen zwischen Zahl und * haben möchtest, dann musst du diese noch entfernen:

    array<System::String ^>^ data = s->Replace(" ","")->Split('*');

    Einbauen sollte kein großes Problem darstellen:

    width + " * " + height
    Achja, parse heißt wortwörtlich übersetzt analysieren.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Samstag, 21. September 2013 18:56
  • Lieben Dank Koopakiller

    Werde mich dann weiter darum kümmern und neu Info einstellen. 

    Bis dann

    lempy

    Sonntag, 22. September 2013 11:28