Programmieren C#

Hallo ,
ich möchte ein Programm in C# schreiben was mir die Zahlen von 1 mit einem Kommata getrennt bis zu einer beliebigen Zahl aufschreibt . Ich habe es bereits versucht umzusetzen jedoch passiert nichts und das Programm hängt sich auf :frowning:
Ich hoffe ihr könnt mir helfen .
Hier mein jetziger Code :
int zahl = 1;
int wieoft;
string schreib;
wieoft = Convert.ToInt16(textBox1.Text);
while (zahl

Hey… probier’s doch mal mit einer for-Schleife:
So, gehn wir mal davon aus, dass du auf einen Button klickst, und dir dann die Zahlen in einer RichTextBox ausgegeben werden - pro Zeile eine Zahl - also:
1
2
3
4

Der Code, der dir Zeile pro Zeile mit den Zahlen füllt wäre Folgender:

(Zeile - Code)

1 private button1_click(…)
2 {
3  int StartZahl = 4 Convert.ToInt32(textbox_startzahl.Text);
5  int EndZahl = Convert.ToInt32(tb_endzahl.Text);
6
7  RichTextBox_ErgebnisListe.Text.Clear();
8
9  for(int i=startzahl; i == Endzahl; i++)
10  {
11   RichTextBox_ErgebnisListe.AppendText("\n" + 12 i.ToString());
13  }
14 }

So, wie du vielleicht bereits gesehen hast, kann der Anwender die Startzahl und Endzahl festlegen. Dafür brauchst du 2 TextBoxes auf deiner Form, damit der Benutzer dort die dementsprechenden Zahlen eingeben kann. [Zeile 4,5] Die Methode „Convert.ToInt32(…)“ [Z.4,5] macht dann aus deinem String-Objekt ein Integer-Objekt, das du als Parameter für die For-SChleife [Z.9] brauchst (um start und ende hat festzulegen)

Zur For-Schleife:

in der For-SChleife definierst du einen integer (ich hab ihn einfach „i“ genannt) und gibst ihm ein (Start)Wert. Dann definierst du das Abbruchkriterium, sprich, welche Bedingung gegeben sein muss, damit die Schleife sich beendet (in meinem Fall, wenn i = Endzahl)Und zum SChluss gibst du an, wie sich „i“ - wenn der COde innerhalb der Schleife EINMAL durchgerattert ist - verändern soll (bei mir ist es so, dass „i“ mit jedem Schleifen-durchlauf um 1 erhöht - du willst ja immerhin alle ganzen zahlen zwischen „Startzahl“ und „Endzahl“.

Das wär’s eigentlich… Ich hoffe ich konnte es halbwegs gut erklären, und dir hat’s geholfen. Ansonsten einfach nochmal nachfragen :wink:

Viel Glück!
Steathdriver

Hallo ,
ich möchte ein Programm in C# schreiben was mir die Zahlen von
1 mit einem Kommata getrennt bis zu einer beliebigen Zahl
aufschreibt . Ich habe es bereits versucht umzusetzen jedoch
passiert nichts und das Programm hängt sich auf :frowning:
Ich hoffe ihr könnt mir helfen .
Hier mein jetziger Code :
int zahl = 1;
int wieoft;
string schreib;
wieoft = Convert.ToInt16(textBox1.Text);
while (zahl

Hallo Swiperisloooser,

nach der Anweisung while (zahl

Hallo hab es nicht ausprobiert aber mich mal klammer für while: also:

while (zahl

In diesem - und auch vielen anderen - Fällen rate ich dir von der while-Schleife eh ab und dafür eine for-Schleife zu installieren:

int wieoft = -1;

if (Int32.TryParse(textBox1.Text, out wieoft))
{
 for (int zahl = 1; zahl 

Danke für deine schnelle Antwort .
Das is ne gute Überlegung mit der for schleife jedoch glaub ich stimmt dein Code nich so ganz (oder mein Pc is Kaputt :smiley: ) denn du hast Variablen Start und End Zahl doppelt deklariert , das funktioniert doch eignlich nich oder liege ich da falsch ?

Danke das Erklärt warum ich dachte das sich das Programm aufhängt :smiley:

Kein Ding :smiley:

Hmm… nee, falls du
„3  int StartZahl = 4 Convert.ToInt32(textbox_startzahl.Text);“
das meinst: Die 4 sollte eigentlich die Zeilenangabe sein, die is da so reingerutscht, sprich es müsste so sein:

int StartZahl = Convert.ToInt32(textbox_startzahl.Text);

Und ansonsten sind beide Variablen nur einmal deklariert, nämlich in Zeile 3 & „5“ (eigl ja 4, aber die hatte sich ja selbstständig gemacht ;D)

In der For-Schleife (Z.9) nämlich werden die Variablen ja nich nochmal deklariert, sondern nur die vorher zugewiesenen Werte abgefragt…

Das Programm müsste somit eigl auch funzen, hab den Code auch in einem meiner Programme so drin (bei meinem Programm lass ich mir statt Zahlenreihen, eingegebene Texte & Masken beliebig oft ausgeben…)

In welcher Zeile meinst du denn tritt die doppelte Deklarierung auf?^^ :smile:

Hallo,

das sieht doch soweit ganz gut aus.
Was kommen unten im Logger für Meldungen?

Aber wozu denn Thread.Sleep( ) ?
Das „,“ würde ich direkt mit in der Zeile übergeben, wo auch die zahl konvertiert wird.
Also vielleicht so:
schreib= zahl.ToString() + „,“;

Alternativ könnte man das sicherlich eleganter mit einer FOR-Schleife lösen.

Danke :smiley:
hab es jetzt folgendermaßen gelöst :
int anfang;
int ende;
string schreib ;
double i = 0 ;
anfang = Convert.ToInt32(textBox1.Text);
ende = Convert.ToInt32(textBox2.Text);
System.Threading.Thread.Sleep(1000);
while (anfang 100 )
{
System.Threading.Thread.Sleep(1000);
i = 0;
}
i++;

}
habe schon versucht ihm mehr pausen zu geben da bei zahlen über 100 der Editor nicht mehr mitkommt :frowning:
Könnte man dieses Problem nich Lösen indem man das Programm die Zahlen gleich in eine .txt datei schreiben lässt ? Ohne zutun des nutzers ? Und wie Programmiert man das ?

Hi

ok, is was kleines, nimm den angepassten code unten.
hast hinter dem while ein ; gemacht, was bedeutet, dass er das while unentlich ausgeführt hat, da die variable „zahl“ nicht hochgezählt wurde.
; bedeutet dann dass er nicht in die klammern rein ging…
analog dann nochmals beim ersten Sleep.

PS: SendKeys.Send zu verwenden ist eher schlecht…such nach anderen möglichkeiten, wenns geht.

Gruss und viel Spass :smile:

int zahl = 1;
int wieoft;
string schreib;
wieoft = Convert.ToInt16(textBox1.Text);
while (zahl

Um Dinge in eine Textdatei zu schreiben musst du am anfang deines Codes - in die „using“ Section auf folgendes verweisen:

using System.IO;

IO steht für InputOutput (soweit ich weiß ;D)

So, wenn du System.IO mit eingebunden hast kannst du so string in dateien schreiben:

string MeinText = „Hello World“;
StreamWriter sw = new StreamWriter(@„C:\Meine Textdatei.txt“);

sw.Write(MeinText);
sw.Close();

(SChreib das sw.Close() erst, wenn du alles in die Datei geschrieben hast,was du drin haben willst, da du mit dieser Methode den Stream zu deiner Textdatei schließt, somit speicherst. Alternativ kannst du noch mit einem boolschen Wert angeben, ob der Inhalt der Datei (falls sie schon vorher vorhanden ist) ersetzen willst, oder ob der StreamWriter den Inhalt der Datei erweitern soll, also am ende der Datei „weiterschreiben soll“ - das gibst du dann so an:

StreamWriter sw = new StreamWriter(@„C:\Meine Textdatei.txt“, false [wenn der Inhalt ersetzt werden soll] ODER true [wenn du den Inhalt erweitern willst]);

Ich weiß ehrlich gesagt nicht, ob das dein Problem löst, aber ich glaub ein Versuch is’s wert :smiley:

Danke hätte nich gedacht das das so einfach geht :smiley:
Habe jedoch noch eine Frage :stuck_out_tongue: wie kann ich in das ganze jetzt noch einen ProgressBar einbinden die gleichzeitig den fortschritt in % anzeigt ?

Müsste ich für eine einbindung der ProgressBar das ganze nich in einen BackgroundWorker schreiben ?

Ja müsstest du, bedenke aber dass wenn du Controls in einem Thread für eine andere Form erstellen und in diese Form einfügen willst, dass mit dem BackgrounWorker so nicht geht. Wenn’s aber nur um die Progbar.Value geht, sollte es keine probleme geben.

Zu den Prozentangaben: dazu musst du die Prozentformel können (Matheunterricht ;D) die ich leider nicht aus dem kopf weiß - und dann nur noch als Value angeben… :wink:

Ich weiß das is jetzt ne dumme frage aber wie starten man nochmal einen backgroundworker ?
Und wie weißt man der ProgressBar den BackgroundWorker zu ?