C# - Wndows-Anwednung (GUI)

delphinhawe

Erfahrenes Mitglied
Hallo, Alle!

Ich habe den Widerstand mit Konsole-Anwendung programmiert und
möchte gerne in der Windows-Anwendung GUI programmieren?
Leider klappt das nicht? Könnt Ihr mir helfen,
wie if bzw. if else in Windows-Anwendung (GUI) programmiert wird?

Anbei Konsole-Anwendung:

Code:
using System;
public class Auswahl_Menü
{
	public static void Main ()
	{
	Console.WriteLine ("Bitte wählen Sie durch Eingabe der Zahl 1,2 oder 3 aus:");
	Console.WriteLine ("1 = Strom");
	Console.WriteLine ("2 = Spannung");
	Console.WriteLine ("3 = Widerstand");
	string Eingabe;
	Eingabe = Console.ReadLine ();
	
		if (Eingabe == "1")
		{
		double Spannung,Widerstand,Strom;
		Console.WriteLine ("Bitte geben Sie Spannung in Volt ein!");
		Spannung = Convert.ToDouble(Console.ReadLine());
		Console.WriteLine ("Bitte geben Sie Widerstand in Ohm ein!");
		Widerstand = Convert.ToDouble(Console.ReadLine());
		Strom=Spannung/Widerstand;
		Console.WriteLine ("Ergebnis: {0} Ampere", Strom);
		}
		else if (Eingabe == "2")
		{
		double Spannung,Widerstand,Strom;
		Console.WriteLine ("Bitte geben Sie Strom in Ampere ein!");
		Strom = Convert.ToDouble(Console.ReadLine());
		Console.WriteLine ("Bitte geben Sie Widerstand in Ohm ein!");
		Widerstand = Convert.ToDouble(Console.ReadLine());
		Spannung=Strom*Widerstand;
		Console.WriteLine ("Ergebnis: {0} Volt", Spannung);
		}
		else if (Eingabe == "3")
		{
		double Spannung,Widerstand,Strom;
		Console.WriteLine ("Bitte geben Sie Spannung in Volt ein!");
		Spannung = Convert.ToDouble(Console.ReadLine());
		Console.WriteLine ("Bitte geben Sie Strom in Ampere ein!");
		Strom = Convert.ToDouble(Console.ReadLine());
		Widerstand=Spannung/Strom;
		Console.WriteLine ("Ergebnis: {0} Ohm", Widerstand);
		}
		else
		{
		Console.WriteLine ("Abbruch!");
		}
	}
}

Windows-Anwendung:
Code:
using System;
using System.Drawing;
using System.Windows.Forms;

public class Fenster : Form
{
    static void Main()
    {
        Fenster HAUPTFENSTER = new Fenster();
        HAUPTFENSTER.Text = "Widerstand";
        Application.Run(HAUPTFENSTER);
    }    
}
 
Hi,

Was verstehst du unter "klappt nicht"?
Kommen Fehler?, Wenn ja, welche?
Wo ist dein Problem genau?

Bzgl. IF / Else:
Die sind in WinForms genau wie in einer Konsolen-Anwendung. Wieso sollte es da unterschiede geben? Was natürlich nicht funktioniert ist Console.WriteLine. Das musst du ersetzen und deine Ausgabe in entsprechende Controls packen.
Würde dir in deinem Fall jedoch ein Switch empfehlen (egal ob Konsole oder GUI).
 
Hi!

Ich würde sagen das man sich erst mal auf der MSDN bezüglich der Programmierung mit
Windows Forms schlau machen sollte.
Also erst mal alles Grundlegende dazu anschauen, die MSDN Casts und auch die CodeClips. ;)
Danach sollte man schonmal eine gute Grundlage haben, damit anzufangen.

Wir möchten hier über Lösungen und nicht über den Urschleim diskutieren.
Das ist jetzt nicht böse gemeint. :) Ich denke Du wirst mir zustimmen,
dass Du so schneller vorran kommen wirst, anstatt darauf zu warten bis Dir hier jemand diese Dinge erklärt...
 
Ok,

ich habe Console.WriteLine in Label umbenannt.

Wie soll ich die ,,Console.ReadLine“ in Windows-Anwendung GUI umbenennen?

,,TEXT07.Text = "Ergebnis: {0} Ampere", Strom;“ ist nicht korrekt, was soll ich ändern?

Anbei mein Programm in Windows-Anwendung GUI

Gruß delphinhawe

Code:
using System;
using System.Windows.Forms;
using System.Drawing;

namespace Widerstand
{
    public class Auswahl_MENU : Form
    {
        Label TEXT01;
        Label TEXT02;
        Label TEXT03;
        Label TEXT04;
        Label TEXT05;
        Label TEXT06;
        Label TEXT07;
        
               
        public Auswahl_MENU()
        {
            TEXT01 = new Label();
            TEXT01.Text = "Bitte wählen Sie durch Eingabe der Zahl 1,2 oder 3 aus:";
            TEXT01.Height = 20;
            TEXT01.Width = 500;
            TEXT01.Left = 0;
            TEXT01.Top = 0;
            Controls.Add(TEXT01);

            TEXT02 = new Label();
            TEXT02.Text = "1 = Strom";
            TEXT02.Height = 20;
            TEXT02.Width = 500;
            TEXT02.Left = 0;
            TEXT02.Top = 20;
            Controls.Add(TEXT02);

            TEXT03 = new Label();
            TEXT03.Text = "2 = Spannung";
            TEXT03.Height = 20;
            TEXT03.Width = 500;
            TEXT03.Left = 0;
            TEXT03.Top = 40;
            Controls.Add(TEXT03);

            TEXT04 = new Label();
            TEXT04.Text = "3 = Widerstand";
            TEXT04.Height = 20;
            TEXT04.Width = 500;
            TEXT04.Left = 0;
            TEXT04.Top = 60;
            Controls.Add(TEXT04);

            string Eingabe;
            Eingabe = Console.ReadLine();  //?

            if (Eingabe == "1")
            {
                double Spannung, Widerstand, Strom;

                TEXT05 = new Label();
                TEXT05.Text = "Bitte geben Sie Spannung in Volt ein!";
                TEXT05.Height = 20;
                TEXT05.Width = 500;
                TEXT05.Left = 0;
                TEXT05.Top = 80;
                Controls.Add(TEXT05);

                Spannung = Convert.ToDouble(Console.ReadLine()); //?

                TEXT06 = new Label();
                TEXT06.Text = "Bitte geben Sie Widerstand in Ohm ein!";
                TEXT06.Height = 20;
                TEXT06.Width = 500;
                TEXT06.Left = 0;
                TEXT06.Top = 100;
                Controls.Add(TEXT06);
                
                Widerstand = Convert.ToDouble(Console.ReadLine()); //? 
                
                Strom = Spannung / Widerstand;

                TEXT07 = new Label();
                TEXT07.Text = "Ergebnis: {0} Ampere", Strom;
                TEXT07.Height = 20;
                TEXT07.Width = 500;
                TEXT07.Left = 0;
                TEXT07.Top = 120;
                Controls.Add(TEXT07);           
            }

        }
        static void Main()
        {
            Auswahl_MENU fenster = new Auswahl_MENU();
            fenster.Text = "delphinhawe";
            fenster.Width = 1000;
            fenster.Height = 1000;
            Application.Run(fenster);
        }
    }
}
 
Hi,

Also ich glaub, ich muss mich Cosmo anschließen. Bitte nicht böse sein, aber ich glaube, du solltest dir in der MSDN mal ein paar Beispiele bzgl. WinForms anschauen. Auf Windowsforms.net gibt es auch sehr gute Beispiel. Zu dem gibts im Netz jede Menge Tutorials.
Da dir einiges an Basics fehlt, solltest du dich etwas damit beschäftigen, wie was funktioniert. Das hier alles zu erklären würde den Rahmen etwas sprengen.

Zu deinem Problem:
Zum Einlesen der Auswahl könntest du z.B. eine TextBox oder ComboBox nutzen.
 
Also, hier ein paar Punkte:

1. Console.WriteLine funktioniert bei Windows.Forms-Anwendungen ebenfalls. Im Debug-Modus werden diese Informationen dann auf der (Debugging)Konsole ausgegeben. Im Release-Modus können diese Informationen ebenfalls noch ausgelesen werden.

2. TextBoxen etc. sollten nicht TEXT01, TEXT02 etc. benannt werden. Immerhin möchte man auch nach 1 Woche noch wissen, welche Werte diese halten. Vergleiche dazu die Lesbarkeit von txtVorname, txtNachname oder VornameTextBox, NachnameTextBox.

3. Das was du machen willst ist:
TEXT07.Text = Format("Der Zahlenwert beträgt {0}", myIntZahlenwert);
 
@Nico:

Ok, wenn ich richtig verrstanden habe, dann ist TextBox das gleiche wie Console.ReadLine! Nun muss ich anders programmieren. Ich werde weiter testen. Danke!

@Norbert:
Danke! :D
Zu 2: Ich werde alle TextBoxen wegen einer besseren Übersicht umbenennen.
Zu 3: Danke für ,,Format“.

Gruß delphinhawe
 
@Nico:

Ok, wenn ich richtig verrstanden habe, dann ist TextBox das gleiche wie Console.ReadLine! Nun muss ich anders programmieren. Ich werde weiter testen. Danke!
Nein, Console.ReadLine ist nicht das selbe wie TextBox.
Davon abgesehen, istdas eine eine Methode und das andere ein Klasse (speziell Control).
Das eine dient dazu Zeichenfolgen in der Konsole einzulesen, das andere dient zur Anzeige von Texten in der GUI bzw auch zum Einlesen.

Noch mal der Hinweis:
Du solltest dich mit den GRundlagen erstmal beschäfftigen. Hier das alles zu erklären, übersteigt den Rahmen und auch etwas den Sinn des Forums.
Hier findest du ein gutes Buch, in dem alles sehr verständlich erklärt ist
 
Hallo Alle,

es ist gut gelaufen.
Wie sieht mein Programm nun aus?
Bitte mal Eure Meinung dazu schreiben.

Gruß delphinhawe

Code:
using System;
using System.Windows.Forms;
using System.Drawing;

class Fenster : Form
{
    RadioButton SCHALTFLÄCHE01;
    RadioButton SCHALTFLÄCHE02;
    RadioButton SCHALTFLÄCHE03;
    RadioButton SCHALTFLÄCHE04;

    Label TITEL;
    Label TEXTFELDER01;
    Label TEXTFELDER02;
    Label UNSICHTBAR01;
    TextBox EINGABEFELDER01;
    TextBox EINGABEFELDER02;
    TextBox AUSGABEFELDER;
    Button SCHALTFLÄCHE0A;

    

    public Fenster()
    {
        Height = 400;														// Höhe des Fensters
        Width = 400;														// Breite des Fensters

        SCHALTFLÄCHE01 = new RadioButton();
        SCHALTFLÄCHE01.Text = "Widerstand";
        SCHALTFLÄCHE01.Location = new Point(50, 60);
        SCHALTFLÄCHE01.Size = new Size(145, 25);
        SCHALTFLÄCHE01.Click += new EventHandler(ANLEGENKLICK01);
        Controls.Add(SCHALTFLÄCHE01);

        SCHALTFLÄCHE02 = new RadioButton();
        SCHALTFLÄCHE02.Text = "Spannung";
        SCHALTFLÄCHE02.Location = new Point(50, 80);
        SCHALTFLÄCHE02.Size = new Size(145, 25);
        SCHALTFLÄCHE02.Click += new EventHandler(ANLEGENKLICK02);
        Controls.Add(SCHALTFLÄCHE02);

        SCHALTFLÄCHE03 = new RadioButton();
        SCHALTFLÄCHE03.Text = "Strom";
        SCHALTFLÄCHE03.Location = new Point(50, 100);
        SCHALTFLÄCHE03.Size = new Size(145, 25);
        SCHALTFLÄCHE03.Click += new EventHandler(ANLEGENKLICK03);
        Controls.Add(SCHALTFLÄCHE03);

        SCHALTFLÄCHE04 = new RadioButton();
        SCHALTFLÄCHE04.Text = "Beenden";
        SCHALTFLÄCHE04.Location = new Point(50, 120);
        SCHALTFLÄCHE04.Size = new Size(145, 25);
        SCHALTFLÄCHE04.Click += new EventHandler(ANLEGENKLICK04);
        Controls.Add(SCHALTFLÄCHE04);

        TITEL = new Label();
        TITEL.Location = new Point(50, 15);
        TITEL.Size = new Size(550, 80);
        TITEL.Font = new System.Drawing.Font("Arial", 16);
        TITEL.Text = "Das Ohmschen Gesetz";
        Controls.Add(TITEL);

        TEXTFELDER01 = new Label();
        TEXTFELDER02 = new Label();
        EINGABEFELDER01 = new TextBox();
        EINGABEFELDER02 = new TextBox();
        AUSGABEFELDER = new TextBox();
        SCHALTFLÄCHE0A = new Button();
        UNSICHTBAR01 = new Label();
    }

    protected void ANLEGENKLICK01(object sender, EventArgs e)
    {
        TEXTFELDER01.Location = new Point(50, 160);
        TEXTFELDER01.Size = new Size(280, 20);
        TEXTFELDER01.Text = "Bitte geben Sie die Spannung in Volt ein:";
        Controls.Add(TEXTFELDER01);
        EINGABEFELDER01.Location = new Point(50, 190);
        EINGABEFELDER01.Size = new Size(280, 20);
        EINGABEFELDER01.Text = "";
        Controls.Add(EINGABEFELDER01);
        TEXTFELDER02.Location = new Point(50, 220);
        TEXTFELDER02.Size = new Size(290, 20);
        TEXTFELDER02.Text = "Bitte geben Sie die Stromstärke in Ampere ein:";
        Controls.Add(TEXTFELDER02);
        EINGABEFELDER02.Location = new Point(50, 250);
        EINGABEFELDER02.Size = new Size(280, 20);
        EINGABEFELDER02.Text = "";
        Controls.Add(EINGABEFELDER02);
        SCHALTFLÄCHE0A.Location = new Point(135, 280);
        SCHALTFLÄCHE0A.Size = new Size(100, 30);
        SCHALTFLÄCHE0A.Text = "Berechnen";
        Controls.Add(SCHALTFLÄCHE0A);
        SCHALTFLÄCHE0A.Click += new EventHandler(WIDERSTANDCLICK);

        // V E R D E C K T !!
        AUSGABEFELDER.Location = new Point(50, 310);
        AUSGABEFELDER.Size = new Size(0, 0);
        AUSGABEFELDER.Text = "";
        Controls.Add(AUSGABEFELDER);
    }

    protected void ANLEGENKLICK02(object sender, EventArgs e)
    {
        TEXTFELDER01.Location = new Point(50, 160);
        TEXTFELDER01.Size = new Size(290, 20);
        TEXTFELDER01.Text = "Bitte geben Sie die Stromstärke in Ampere ein:";
        Controls.Add(TEXTFELDER01);
        EINGABEFELDER01.Location = new Point(50, 190);
        EINGABEFELDER01.Size = new Size(280, 20);
        EINGABEFELDER01.Text = "";
        Controls.Add(EINGABEFELDER01);
        TEXTFELDER02.Location = new Point(50, 220);
        TEXTFELDER02.Size = new Size(280, 20);
        TEXTFELDER02.Text = "Bitte geben Sie den Widerstand in Ohm ein:";
        Controls.Add(TEXTFELDER02);
        EINGABEFELDER02.Location = new Point(50, 250);
        EINGABEFELDER02.Size = new Size(280, 20);
        EINGABEFELDER02.Text = "";
        Controls.Add(EINGABEFELDER02);
        SCHALTFLÄCHE0A.Location = new Point(135, 280);
        SCHALTFLÄCHE0A.Size = new Size(100, 30);
        SCHALTFLÄCHE0A.Text = "Berechnen";
        Controls.Add(SCHALTFLÄCHE0A);
        SCHALTFLÄCHE0A.Click += new EventHandler(SPANNUNGCLICK);

        // V E R D E C K T !!
        AUSGABEFELDER.Location = new Point(50, 310);
        AUSGABEFELDER.Size = new Size(0, 0);
        AUSGABEFELDER.Text = "";
        Controls.Add(AUSGABEFELDER);
    }

    protected void ANLEGENKLICK03(object sender, EventArgs e)
    {
        TEXTFELDER01.Location = new Point(50, 160);
        TEXTFELDER01.Size = new Size(280, 20);
        TEXTFELDER01.Text = "Bitte geben Sie die Spannung in Volt ein:";
        Controls.Add(TEXTFELDER01);
        EINGABEFELDER01.Location = new Point(50, 190);
        EINGABEFELDER01.Size = new Size(280, 20);
        EINGABEFELDER01.Text = "";
        Controls.Add(EINGABEFELDER01);
        TEXTFELDER02.Location = new Point(50, 220);
        TEXTFELDER02.Size = new Size(280, 20);
        TEXTFELDER02.Text = "Bitte geben Sie den Widerstand in Ohm ein:";
        Controls.Add(TEXTFELDER02);
        EINGABEFELDER02.Location = new Point(50, 250);
        EINGABEFELDER02.Size = new Size(280, 20);
        EINGABEFELDER02.Text = "";
        Controls.Add(EINGABEFELDER02);
        SCHALTFLÄCHE0A.Location = new Point(135, 280);
        SCHALTFLÄCHE0A.Size = new Size(100, 30);
        SCHALTFLÄCHE0A.Text = "Berechnen";
        Controls.Add(SCHALTFLÄCHE0A);
        SCHALTFLÄCHE0A.Click += new EventHandler(AMPERECLICK);

        // V E R D E C K T !!
        AUSGABEFELDER.Location = new Point(50, 310);
        AUSGABEFELDER.Size = new Size(0, 0);
        AUSGABEFELDER.Text = "";
        Controls.Add(AUSGABEFELDER);
    }

    protected void ANLEGENKLICK04(object sender, EventArgs e)
    {
        Close();
    }

    void WIDERSTANDCLICK(object sender, EventArgs e)
    {
        AUSGABEFELDER.Location = new Point(50, 320);
        AUSGABEFELDER.Size = new Size(280, 20);
        double zahl01 = Convert.ToDouble(EINGABEFELDER01.Text.ToString());
        double zahl02 = Convert.ToDouble(EINGABEFELDER02.Text.ToString());
        double zahl03 = zahl01 / zahl02;
        AUSGABEFELDER.Text = "" + zahl03.ToString();
        AUSGABEFELDER.Text += " Ohm";
        Controls.Add(AUSGABEFELDER);        
    }

    void SPANNUNGCLICK(object sender, EventArgs e)
    {
        AUSGABEFELDER.Location = new Point(50, 320);
        AUSGABEFELDER.Size = new Size(280, 20);
        double zahl01;
        double zahl02;
        double zahl03;

        string AUSGABE;
        
        zahl01 = Convert.ToDouble(EINGABEFELDER01.Text);
        zahl02 = Convert.ToDouble(EINGABEFELDER02.Text);

        zahl03 = zahl01 / zahl02;

        AUSGABE = " " + zahl03.ToString();
        AUSGABE += " Volt";
        AUSGABEFELDER.Text = AUSGABE;
        Controls.Add(AUSGABEFELDER);                
    }

    void AMPERECLICK(object sender, EventArgs e)
    {
        AUSGABEFELDER.Location = new Point(50, 320);
        AUSGABEFELDER.Size = new Size(280, 20);
        double zahl01 = Convert.ToDouble(EINGABEFELDER01.Text.ToString());
        double zahl02 = Convert.ToDouble(EINGABEFELDER02.Text.ToString());
        double zahl03 = zahl01 / zahl02;
        AUSGABEFELDER.Text = "" + zahl03.ToString();
        AUSGABEFELDER.Text += " Ohm";
        Controls.Add(AUSGABEFELDER);
    }

    static void Main()
    {
        Fenster HAUPTFENSTER = new Fenster();
        HAUPTFENSTER.Text = "delphinhawe's GUI";
        HAUPTFENSTER.BackColor = Color.FromArgb(73, 116, 255);
        Application.Run(HAUPTFENSTER);
    }
}
 
Na dann will ich mal starten:

1. Keine Umlaute verwenden

2. Warum schreibst du die Variablennamen in Großbuchstaben? Verwende beispielsweise sowas wie Camel-Casing: btnTest, txtUsername etc. Das erhöht unter anderem die Lesbarkeit.

3. Unter Anlegenklick01 und Anlegenklick02 machst du immer das gleiche, ausser der Zuweisung des EventHandlers. Daher könntest du dir _eine_ Methode machen, die dir die Controls anlegt und unter Anlegenklick01 bzw. 02 setzt zu einfach nur mehr die entsprechenden EventHandler. Damit vermeidest du doppelten Code, was die Wartbarkeit deines Codes erhöht.

4. Die Benennung deiner Felder ist natürlich auch nicht optimal: Ausgabefelder ... nun, ok, aber was genau steht da drinnen? Das ist durch den Namen nicht ersichtlich, wäre aber sinnvoll.


Das sollte für den Anfang mal reichen.
 
Zurück