Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
C# Schleife für if-Anweisung
- Ersteller MuneWrecker
- Erstellt am
- Registriert
- Apr. 2015
- Beiträge
- 52
die schleife ist nur dafür da, dass die if-anweisung (für option 1 oder 2) immer wieder ausgeführt wird, da der button der bestimmt ob es 1 oder 2 wird ja erst nach einer weile gedrückt wird. ohne schleife ist also das problem, das nix passiert wenn der button gedrückt wird, weil die variable zwar den wert 1 oder 2 hat aber die if-anweisung schon durchgelaufen ist.
aber das mit den textzeilen ist trotzdem interessant ^^
aber das mit den textzeilen ist trotzdem interessant ^^
Für eine Forms/WPF-Anwendung ist diese Vorgehensweise eher ungewöhnlich. Der Code, der das Anstößt sollte im Click-Event vom Button sein. Du willst das nicht, weil dann "zu viel Code" im Button-Event-Block hast? Das Tolle an objektorientierten Sprachen ist, dass man z.B. sowas machen kann:
Es wird alles von der Klasse hinter state verwaltet. Die weiß auch, an welcher Stelle im Text du sich befindest, so dass beim mehrfachen Drücken des Buttons nicht immer die selbe Ausgabe kommt.
Alternativ kannst du auch einen Game-Loop einbauen, der ständig im Hintergrund läuft und die Variable abfragt. Es wurde ja schon der BackgroundWorker genannt. Ein Vorteil davon sehe ich aber nicht, da der Code nur von einer anderen Stelle aus aufgerufen wird.
Code:
protected void Button1_Click() {
state.chooseOption(1);
}
Alternativ kannst du auch einen Game-Loop einbauen, der ständig im Hintergrund läuft und die Variable abfragt. Es wurde ja schon der BackgroundWorker genannt. Ein Vorteil davon sehe ich aber nicht, da der Code nur von einer anderen Stelle aus aufgerufen wird.
- Registriert
- Apr. 2015
- Beiträge
- 52
wo finde ich mehr informationen zu dem "chooseOption" befehl?
wenn man das googlet kommen nur sehr eigenartige ergebnisse
wenn man das googlet kommen nur sehr eigenartige ergebnisse
SomeDifferent
Lt. Junior Grade
- Registriert
- März 2014
- Beiträge
- 469
Ich gehe sehr stark davon aus, dass es sich bei der state.chooseOption() nur um Pseudocode handelt, um dir zu veranschaulichen wie man so etwas objektorientiert lösen könnte.
Noch einmal zum Verständnis :
Du hast eine Textbox in der eine Frage steht.
Du hast 2 Knöpfe, also für jede Frage zwei Antwortmöglichkeiten?
Je nach dem welchen Knopf du drückst, soll etwas passieren und eine neue Frage in die Textbox geschrieben werden?
Noch einmal zum Verständnis :
Du hast eine Textbox in der eine Frage steht.
Du hast 2 Knöpfe, also für jede Frage zwei Antwortmöglichkeiten?
Je nach dem welchen Knopf du drückst, soll etwas passieren und eine neue Frage in die Textbox geschrieben werden?
- Registriert
- Apr. 2015
- Beiträge
- 52
@SomeDifferent
sozusagen ja. ich kann gleich mal den ganzen code posten.
@Darlis
nur in nem tutorial bsp. aber ich habe noch nicht ganz verstanden was mir das in meinem fall bringen soll
hier ist mal der ganze code. das was bisher in der textbox steht ist natürlich nur um zu sehen ob es funktioniert.
achso und ich habe den wert von "a" einfach mal in ne .txt datei geschrieben. ich bin mir bewusst dass das keine gute methode ist aber ich wollte es mir leichter machen zu verstehen was da eigentlich passiert.
sozusagen ja. ich kann gleich mal den ganzen code posten.
@Darlis
nur in nem tutorial bsp. aber ich habe noch nicht ganz verstanden was mir das in meinem fall bringen soll
Ergänzung ()
hier ist mal der ganze code. das was bisher in der textbox steht ist natürlich nur um zu sehen ob es funktioniert.
achso und ich habe den wert von "a" einfach mal in ne .txt datei geschrieben. ich bin mir bewusst dass das keine gute methode ist aber ich wollte es mir leichter machen zu verstehen was da eigentlich passiert.
C#:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
tb_ausgabe.Text = "Du bist in einem Raum." + Environment.NewLine;
tb_ausgabe.Text += "Was möchtest du tun?" + Environment.NewLine;
tb_ausgabe.Text += "1 - Fluchtweg suchen." + Environment.NewLine;
tb_ausgabe.Text += "2 - Nach nützlichen Gegenständen suchen." + Environment.NewLine;
// hier sollte eigentlich die schleife hin
{
string b = System.IO.File.ReadAllText(@"C:\Users\*******\Desktop\if test.txt");
if (b == "1")
{
tb_ausgabe.Text += Environment.NewLine + "Du hast eine Tür gefunden.";
}
}
}
private void btn_opt1_Click(object sender, EventArgs e)
{
string a = "1";
Console.WriteLine(Eingabe(a));
}
private void btn_opt2_Click(object sender, EventArgs e)
{
string a = "2";
Console.WriteLine(Eingabe(a));
}
static string Eingabe(string a)
{
using (StreamWriter sw = new StreamWriter(@"C:\Users\******\Desktop\if test.txt"))
sw.Write(a);
return a;
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
Zuletzt bearbeitet:
- Registriert
- Apr. 2015
- Beiträge
- 52
gute frage... xD
wenn ich das nach unten kopiere steht da aber, das unerreichbarer code entdeckt wurde.
"Für das nicht statische Feld, die Methode oder die Eigenschaft "Form1.tb_ausgabe" ist ein Objektverweis erforderlich. "
Ergänzung ()
wenn ich das nach unten kopiere steht da aber, das unerreichbarer code entdeckt wurde.
"Für das nicht statische Feld, die Methode oder die Eigenschaft "Form1.tb_ausgabe" ist ein Objektverweis erforderlich. "
Zuletzt bearbeitet:
- Registriert
- Apr. 2015
- Beiträge
- 52
ne. das ist der grund warum ich tutorials nicht so sehr mag.
ich habe mal ne neue methode "Ausgabe" gemacht und die als publice gekennzeichnet. das schein zu funktionieren.
ich habe mal ne neue methode "Ausgabe" gemacht und die als publice gekennzeichnet. das schein zu funktionieren.
Das ist das Problem mit den Tutorials, wenn die Grundlagen fehlen. Mach wenigstens aus dem public ein private. Das ändert an der aktuellen Funktionsweise nichts, ist aber "Best-Practice".MuneWrecker schrieb:das schein zu funktionieren.
- Registriert
- Apr. 2015
- Beiträge
- 52
jetzt ist das problem aber wieder, das nichs passiert wenn der Button gedrückt wird...
muss ich nicht irgend einen wert mit "return" zurückgeben?
muss ich nicht irgend einen wert mit "return" zurückgeben?
Nein, da muss nichts mit return gemacht werden. Das ist bei der Methode Eingabe auch unsinnig umgesetzt.
Du benutzt wahrscheinlich Visual Studio? Dann setzt einen Breakpoint unter der btn_click Methode, starte das Programm im Debug-Modus und gehe den Code Schritt für Schritt (F10, F11) durch.
Du benutzt wahrscheinlich Visual Studio? Dann setzt einen Breakpoint unter der btn_click Methode, starte das Programm im Debug-Modus und gehe den Code Schritt für Schritt (F10, F11) durch.
- Registriert
- Apr. 2015
- Beiträge
- 52
hab ich gemacht. der code von "Ausgabe" wird nicht einmal geladen.
wenn ich das richtig verstanden habe, muss man methoden aufrufen damit sie was machen oder? weil wenn das so ist dann will ich da ja garkeine methode haben. der code soll so oder so durchlaufen und um zu bestimmen was dann passiert habe ich ja die if-anweisung
Ergänzung ()
wenn ich das richtig verstanden habe, muss man methoden aufrufen damit sie was machen oder? weil wenn das so ist dann will ich da ja garkeine methode haben. der code soll so oder so durchlaufen und um zu bestimmen was dann passiert habe ich ja die if-anweisung
Zuletzt bearbeitet:
Nein, wirklich?MuneWrecker schrieb:wenn ich das richtig verstanden habe, muss man methoden aufrufen damit sie was machen oder?
Dann wäre es jetzt höchste Zeit mal einen Grundkurs in C# zu machen, sonst bringt das nichts.
SomeDifferent
Lt. Junior Grade
- Registriert
- März 2014
- Beiträge
- 469
Ja, ich würde dir auf jeden Fall nahelegen, dir die Grundkenntnisse anzueignen. Es gibt massig Informationen und Tutorials im Netz. Bzgl. Methoden habe ich beim Überfliegen das hier gefunden. Der bietet eine ganze Videoserie zu C# an - sieht nicht verkehrt aus. Kannst du dir ja je nach Bedarf das passende Video als Einstieg suchen.
- Registriert
- Apr. 2015
- Beiträge
- 52
ich schau es mir mal an, danke.
das ding ist halt dass ich schon ne video serie zu c# angeschaut habe, aber es eben sehr schwer finde die beispiele von den videos auf mein eigenes programm zu übertragen
das ding ist halt dass ich schon ne video serie zu c# angeschaut habe, aber es eben sehr schwer finde die beispiele von den videos auf mein eigenes programm zu übertragen
So programmiert man aber nicht.
Du willst den ganzen Code nicht im Button_Click() haben, also machst du dich über Methoden schlau. Ich hatte ja schon ein Beispiel mit einem objektorientierten Ansatz gepostet, der den Code/Logik in andere Klassen auslagert (die bessere Variante).
Du bekommst eine Fehlermeldung wegen dem Wort static? Dann machst du dich über static schlau und schreibst nicht "irgendwas was irgendwie funktioniert" (und anscheinend auch nur kompiliert hat, denn wie geplant funktioniert hat das ja auch nicht).
Du musst die Theorie der Konzepte von C# lernen und sie praktisch in deinem Programm umsetzen. Mit deinem aktuell sehr limitieren Wissen über C# wirst du nicht weit mit deinem Programm kommen.
Du willst den ganzen Code nicht im Button_Click() haben, also machst du dich über Methoden schlau. Ich hatte ja schon ein Beispiel mit einem objektorientierten Ansatz gepostet, der den Code/Logik in andere Klassen auslagert (die bessere Variante).
Du bekommst eine Fehlermeldung wegen dem Wort static? Dann machst du dich über static schlau und schreibst nicht "irgendwas was irgendwie funktioniert" (und anscheinend auch nur kompiliert hat, denn wie geplant funktioniert hat das ja auch nicht).
Du musst die Theorie der Konzepte von C# lernen und sie praktisch in deinem Programm umsetzen. Mit deinem aktuell sehr limitieren Wissen über C# wirst du nicht weit mit deinem Programm kommen.
SomeDifferent
Lt. Junior Grade
- Registriert
- März 2014
- Beiträge
- 469
Versuch mal den Beispielcode ans Laufen zu bekommen. Ich habe versucht dein Beispiel so gut es geht zu berücksichtigen.
Wenn es läuft, Debuggst du dich Schritt für Schritt durch den Quellcode und machst dich währenddessen über Klassen, Methoden und Funktionen schlau
Ich hoffe der Code funktioniert so Fehlerfrei. Habe ich in VB.NET geschrieben und durch einen Converter gejagt - ja ihhh vb...
Wenn es läuft, Debuggst du dich Schritt für Schritt durch den Quellcode und machst dich währenddessen über Klassen, Methoden und Funktionen schlau

Ich hoffe der Code funktioniert so Fehlerfrei. Habe ich in VB.NET geschrieben und durch einen Converter gejagt - ja ihhh vb...

C#:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
public class Form1
{
private void Form1_load(object sender, EventArgs e)
{
var manager = new QuestionManager(txtMain, cmdOptionA, cmdOptionB);
}
}
public class QuestionManager
{
private Question _Question;
private TextBox _TextBox;
private Button _OptionA;
private Button _OptionB;
public QuestionManager(TextBox textBox, Button optionA, Button optionB)
{
_TextBox = textBox;
_OptionA = optionA;
_OptionB = optionB;
optionA.Click += _OptionA_Click;
optionB.Click += _OptionB_Click;
_TextBox.AppendText("Hallo und herzlich Willkommen in dem Tutorial!");
_TextBox.AppendText(Environment.NewLine);
SelectQuestion(new QuestionFlow().GetQuestion());
}
private void _OptionB_Click(object sender, EventArgs e)
{
ChooseDecision(_Question.DecisionB);
}
private void _OptionA_Click(object sender, EventArgs e)
{
ChooseDecision(_Question.DecisionA);
}
private void ChooseDecision(Decision decision)
{
WriteLine("Antwort : " + decision.Description);
SelectQuestion(decision.ContinueWith);
}
private void WriteLine(string text)
{
_TextBox.AppendText(Environment.NewLine);
_TextBox.AppendText(text);
}
private void SelectQuestion(Question question)
{
if (question == null)
{
WriteLine("Das Tutorial ist zuende.");
_OptionA.Enabled = false;
_OptionB.Enabled = false;
}
else
{
_Question = question;
WriteLine(_Question.Description);
_OptionA.Text = question.DecisionA.Description;
_OptionB.Text = question.DecisionB.Description;
}
}
}
public class QuestionFlow
{
public Question GetQuestion()
{
return new Question("Möchtest du links oder rechts gehen?", GetGoLeftDecision, GetGoRightDecision);
}
private Decision GetGoLeftDecision()
{
return new Decision("links", GetLeftQuestion());
}
private Question GetLeftQuestion()
{
return new Question("Hast du deine Unterhose gewechselt?", GetYesDecision(GetFinalQuestion), GetNoDecision(GetFinalQuestion));
}
private Decision GetGoRightDecision()
{
return new Decision("rechts", GetRightQuestion);
}
private Question GetRightQuestion()
{
return new Question("Magst du Züge?", GetYesDecision(GetFinalQuestion), GetNoDecision(GetFinalQuestion));
}
private Question GetFinalQuestion()
{
return new Question("Hat dir das Tutorial gefallen?", GetYesDecision(null), GetNoDecision(null));
}
private Decision GetYesDecision(Question continueWith)
{
return new Decision("Ja", continueWith);
}
private Decision GetNoDecision(Question continueWith)
{
return new Decision("Nein", continueWith);
}
}
public class Question
{
public string Description { get; set; }
public Decision DecisionA { get; set; }
public Decision DecisionB { get; set; }
public Question(string description, Decision decisionA, Decision decisionB)
{
this.Description = description;
this.DecisionA = decisionA;
this.DecisionB = decisionB;
}
}
public class Decision
{
public string Description { get; set; }
public Question ContinueWith { get; set; }
public Decision(string description, Question contiueWith)
{
this.Description = description;
this.ContinueWith = contiueWith;
}
}
Ähnliche Themen
- Antworten
- 17
- Aufrufe
- 5.295