C# Anfänger Frage über if else in Windows Forms anwendung

Ellinikoskaffes

Cadet 2nd Year
Registriert
Feb. 2013
Beiträge
19
Hallo alle Leser, :D
falls dieser Thema schon Existiert, bitte ich um Entschuldigung!:(:(

Ich bin in der Erste Ausbildungsjahr als IT Fachinformatiker Systemintegration und wir lernen grade die C# Sprache:eek: - (Ist seit 2012 von IHK Pflicht das zu können("Die Basic halt") und wird auch unser Abschluss Klausur sein.:freak::eek:) Ich habe ein Buch von C# gekauft von "Galileo Computing" das Buch heißt "Programmieren Lernen!" Das buch ist super komme schritt für schritt immer weiter voran... nur... einige fragen kann mir leider das buch nicht beantworten und da möchte ich euch, die besser mit C# auskennen, die fragen stellen.

Es geht um das Thema "if else" Befehl

Also ich weiß, dass man im "if else" einen "string | bool | int" benötigt, damit man den Befehlt richtig ausführt

Zu Information ich probiere hier C# Windowsform Anwendungen & experimentiere befehle.

Hier ein Beispiel:

Code:
string weekday = "Monday";
if (weekday == "Monday") {
//Mach was am Montag.
}

Und hier ist mein Test was ich machen wollte:

Folgendes soll dieser Code machen, wenn im TextBox ein Text geschrieben wird soll mit der Button mit ein Maus Klick im Label anzeigen.
Und hier habe ich jetzt den Hacken!!
:pcangry: :watt: :stock:

Wenn im TextBox leer ist soll eine Meldung zeigen ansonsten soll den text im Label angezeigt werden.

FRAGE: Wie kann man eine Klasse z.B. textbox1 ohne "string | bool | int" in "if else" einbinden? Habe ich dort ein Fehler gemacht oder es fehlt was wo ich als Anfänger nicht weiß ?

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OpenDor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void bt_play_Click(object sender, EventArgs e)
        {
            label1.Text = textBox1.Text;
        }

        private void label1_Click(object sender, EventArgs e)
        {
          

                
        }
    }
}

Jede Antwort oder Lösungswege währe ich zu tiefst Dankbar!


P.S. Bitte um Entschuldigung falls ihr Rechtschreibfehler seht, bin kein Deutscher ;).
 
Du hast die Lösung schon in deinem Code. Du kannst für den Vergleich nicht direkt die TextBox heranziehen, dass ist richtig - aber ihre Eigenschaft "Text", und die ist ein String!


if (TextBox1.Text == "blabla") ...
 
Zuletzt bearbeitet:
wenn du tatsächlich prüfen willst, ob irgendetwas - egal was - in der textbox steht, also "nicht null" ist, kannst du das mit

if(!string.IsNullOrEmpty(TextBox1.Text)) prüfen
 
Ellinikoskaffes schrieb:
Also ich weiß, dass man im "if else" einen "string | bool | int" benötigt, damit man den Befehlt richtig ausführt
if() erwartet ausschließlich einen Booleschen Wert. Ob dieser durch Stringvergleich oder Funktionsaufruf, etc. kommt spielt keine Rolle.
 
Wenn du strings vergleichst, dann besser mit "equals", da du bei Variablen mit == Probleme bekommen kannst.

Das wäre in deinem Fall dann:
if (weekday.equals("Monday"))
{
...
}
 
Der Operator == ist in C# überladen, daher gibt es das Problem, das Anfänger in Java haben nicht. Intern ruft == in C# nämlich Equals auf.
 
Ernie123 schrieb:
Wenn du strings vergleichst, dann besser mit "equals", da du bei Variablen mit == Probleme bekommen kannst.

Dies trifft aber nur auf Klassen zu, nicht jedoch auf Datentypen.
Außerdem musst du bei eigenen Klasen die Equals-Methode overriden.
 
Danke für die schnelle Antwort bin auch jetzt weiter gekommen! :)

Auf weitere Antworten wäre ich ganz Ohr!

:rolleyes:

Und was AndrewPoison schreibt hat voll kommen recht, verstehe nicht wieso ich das nicht wahrgenommen habe :D :lol:
 
Also das nächste Problem was ich grade habe, versuche jetzt im "if else" den Befehlt einzugeben, wenn im textBox1 leer ist soll ein Messenger auftauchen, nur dummer weise kommt der Messenger wenn ich ein Text rein schreibe & dan auf den Button Drücke. :lol:

Code:
namespace uebung
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = textBox1.Text;

            if (textBox1.Text == "" == false) {

                MessageBox.Show("Schreib was rein!");  
            
            }

        }
    }
}

Ich weiß nicht was für ein befelt in "if" rein kommen soll, damit der PC überprüft WENN es LEER ist dan soll die Meldung ausgeben und nicht anderes.
 
EDIT: war gerade schrott:

:-)

Hier mal als Pseudocode:

Code:
Wenn Bedingung erfüllt // bspw. TextBox.Text == leer
{
   Dann gibt MessageBox aus;
}
sonst // hier TextBox.Text ist nicht leer
{
     mache etwas anderes
}

Und schau Dir Vergleichsoperatoren in C# an.
 
Zuletzt bearbeitet:
Code:
 if (textBox1.Text == "") {
MessageBox.Show("Schreib was rein!");
}

Deine boolsche Bedingung erfüllt genau das Gegenteil.
 
und die elegantere lösung wäre

void TextBox1TextChanged(object sender, EventArgs e) {
changelistener();
}

void changelistener() {
if (textBox1.Text.Length ==0) {
label1.Text = "Bitte was reinschreiben";

} else {
label1.Text= textBox1.Text;

}

}
damit wird der click auf den button überflüssig weil das Event immer dann aufgerufen wird wenn sich der text ändert.
beim starten 1x:

public MainForm(){
changelistener();

}

damit das Event 1x manuell beim start ausgeführt wird.

lg

m2k
 
Du sollst niemals so machen
String weekday = ....
.....
if(weekday.Equals("Montag"))
{
}

denn man muss vorher prüfen ob String einen Gültigen wert hat, da String eine Klasse und kein Struct ist.

Besser immer

if(String.Equals(weekday, "Montag")==true)
{
}

Ja explizit angeben ob es true oder false ist. Machst dir dann später einfacher nach Fehlern zu suchen.


Man sollte allgemein angewöhnen Object.Equals (wobei Object deine Klasse/Struct ist) anstatt Instanzinterne Equals zu benutzen. Und ja, für jeden Object musst du dann Equals/GetHashCode Überschrieben. IEquatable sollte abhilfe schaffen.
 
Zuletzt bearbeitet:
roker002 schrieb:
denn man muss vorher prüfen ob String einen Gültigen wert hat, da String eine Klasse und kein Struct ist.
.Equals ist Java-Style, wir sind in C#. Stringvergleich geht mit ==, wie schon vorher erwähnt. Damit entfällt auch Dein Hinweis.

roker002 schrieb:
Ja explizit angeben ob es true oder false ist. Machst dir dann später einfacher nach Fehlern zu suchen.
Das ist "Anfänger-Code". Jeder erfahrene Programmierer wird bei "if (... == true)" erstmal "WTF" denken, und sich dann die Frage stellen, ob der Author dieses Codes weiß, was er tut, oder ob das ein Bug sein könnte. Regel 1: vermeide Code, der verwirrt, oder aussieht wie ein Fehler.

Außerdem wird es Styleguide-Warnings bei jedem vernünftig konfigurierten Resharper/Stylecop geben.
 
Zuletzt bearbeitet:
Nabend alle, leider kommt meine Antwort etwas spät.
:(

Danke nochmal an alle! Ihr habt mir sehr geholfen, hoffe ihr werden mich in mehreren fragen für die Zukunft, genau so schnell beantworten! :)
:):bussi:

Also bei einige Befehle kann ich es nachvollziehen aber bei einige ist es etwas komplizierter gestrickt. Natürlich werde ich diesen Samstag, dran sitzen und das Studieren! :king:

P.S. Mein Letztes Projekt was ich in der Schule abgegeben habe war ein "Windows form Programm" womit man Radio hören kann. :D Ihr Profis sagt natürlich ja ... das ist doch kinder kram... aber ich war voll glücklich darüber. :D

Lg

Ellinikoskaffes ~ Griechischerkaffee
 
Zuletzt bearbeitet:
captmcneil schrieb:
Jeder erfahrene Programmierer wird bei "if (... == true)" erstmal "WTF" denken, und sich dann die Frage stellen, ob der Author dieses Codes weiß, was er tut, oder ob das ein Bug sein könnte. Regel 1: vermeide Code, der verwirrt, oder aussieht wie ein Fehler.
Ich gewöhne mir gerade an, true und false immer hinzuschreiben, gerade damit andere Programmierer den Quelltext besser verstehen. Manchmal lässt es sich einfach nicht vermeiden, etwas undurchsichtigen Code zu schreiben. Da ist jeder Neuer am Quelltext ziemlich froh, wenn er einfach zu er mit true und false in die richtige Verständnisrichtung geschubst wird.
Ein ! ist schneller überlesen als ein "== true" oder "== false", zumal ja auch nicht immer sofort an der Vergleichsvariable erkennbar ist, ob da für den Fall x ein true oder false zurückgeliefert wird.
 
Zuletzt bearbeitet:
Wenn man sprechenden Code schreibt, versteht man auch ohne "true" und "false", was der Sinn des Codeschnipsel ist.
Wenn wir bspw. ein CleanUp über unsere Projekte laufen lassen, dann sind diese "überflüssgen" Angaben wieder weg. Trotzdem weiß jeder, was and der Stelle passiert.
 
Aber es ist nicht immer möglich, sprechenden Code zu schreiben. Genau deswegen schreibe ich es zum besseren Verständnis hin.
 
captmcneil schrieb:
.Equals ist Java-Style, wir sind in C#. Stringvergleich geht mit ==, wie schon vorher erwähnt. Damit entfällt auch Dein Hinweis.

Ich denke du verstehst mich falsch. Denn ein
weekdays.Equals("montag")
wird sicher eine NullReferenceException verursachen wenn weekdays null ist. Ein Object.Equals ist auf jeden Fall viel sicherer als ein Reference Equals.


captmcneil schrieb:
Das ist "Anfänger-Code". Jeder erfahrene Programmierer wird bei "if (... == true)" erstmal "WTF"
Meine Erfahrung nach, ist es ganz anders. Und einen boolischen Wert auf true zu prüfen ist kein Fehler und erzeugt auch keine Verwirrung.

Zu dem Code Optimizer:

Klar könnt ihr alles unnötige rausfiltern. Aber man sollte auch bedenken, dass durch diese Abkürzungen im Code die Fehler nicht so schnell herauslesbar sind. Ich finde solche Codeoptimierungen als Suboptional, da der Compiler selbst den Code optimiert. Also wozu einen undurchsichtigen Code der schlecht lesbar ist, wenn es eh nachher noch einmal optimiert wird.


E-Laurin versteht auch was ich meine.
 
Zurück
Oben