also es tut mir leid herbivore, aber der beitrag ist wohl echt sry fürn arsch. es sind beide dateien im gleichen verzeichnis und der dateiname ist auch richtig angegeben. bin zwar kein guter c#-coder aber blöd bin ich nciht 😉
weiß keiner mehr weiter? oder hat es keiner mehr gelesen? wäre nice, wenn mir da noch wer helfen könnte!
MfG
so neue version ist jetzt fertig. habs jetzt mal hochgeladen:
was hält ihr davon, rückmeldungen wäre nice!
alles klar. doch jetzt hab ich schon wieder das nächste prob:
private void btnBoxes_Click(object sender, EventArgs e)
{
string Programmname2 = "cmd.exe";
string Parameter2 = "/c \"test\\test.txt\"";
System.Diagnostics.Process.Start(Programmname2, Parameter2);
}
und
private void btnStart_Click(object sender, EventArgs e)
{
if (txtMinutes.Text != string.Empty)
{
string Programmname1 = "cmd.exe";
string Parameter1 = "/c \"test\\test.bat\"";
System.Diagnostics.Process.Start(Programmname1, Parameter1);
}
else
{
MessageBox.Show("Bitte erst einen Wert eingeben!", "Fehler",
MessageBoxButtons.OK,
MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
}
}
warum geht es bei der txt datei? die wird geöffnet. doch die bat datei wird wieder nicht ausgeführt. wenn die bat - datei im selben verzeichnis ist, wie mein programm, dann gehts aber so nicht 🙁
also wenn es vorher hieß:
string Programmname = "cmd.exe";
string Parameter = "/c test.bat";
muss es jetzt einfach:
string Programmname = "cmd.exe";
string Parameter = "/c Test\\test.bat";
heißen? wenn ja, dann geht es aber leider irgendwie nicht 🙁
alles klar danke....das geht einwandfrei. aber was, wenn die datei noch in einem anderen ordner ist? wie mach ich das dann? also in einem anderen verzeichnis?
mfg
hi @ll
schreibe gerade ein prog, mit welchem ich eine externe bat datei starten kann. jedoch klappt es leider nicht. ich kann ohne jegliche probleme exe - dateien öffnen, jedoch bei bat - dateien geht es nicht. an was liegt es? ich verwende folgenden code:
string programmname = "C:\\Programme\\LALLA\\asdf\\test.bat";
System.Diagnostics.Process.Start(progammname);
wenn ich oben jetzt statt "test.bat" eine "test.exe" mache und auch eine solche in dem angegebenen ordner habe, dann funktioniert es, jedoch mit der bat nicht. an was liegt es? wer kann mir helfen?
mfg
den beitrag bzw den post von hebivore,also das tut verstehe ich leider nicht.
kann mir vll noch wer sagen, wie ich einstellen kann, dass ALLES nicht eingegeben werden kann, außer ".", "," und Zahlen? am besten auch mit e.Handeld = true;
ich weiß leider dazu die befehle nicht. wäre nice, wenn mir das wer sagen könnte.
das mit den leeren textboxen wurde bereits behoben!
mfg
servus,
habe mal nen kl. Zinseszinsrechner geproggt. Bin ja noch anfänger und hab dafür knapp 2 - 2,5h gebraucht
aber jetzt läuft er schon recht gut. es gibt zwar noch sicherlich ein paar sachen zu verbessern, aber naja...die könnt ihr mir ja mal posten!
die geläufigsten dinge habe ich auf jeden fall im voraus schon versucht zu beheben. so kann man zb keine buchstaben, sonderzeichen usw in die textfelder eingeben, d.h. es ist nur eine ZAHLENEINGABE zulässig.
außerdem kann man komma sowie auch pkt als dezimaltrennzeichen eingeben. es führt zum gleichen richtigen ergebenis.
jo ich denke, dass wars auch schon. ihr könnt ja mal posten, was ihr davon hält!
mfg
nochmal vielen dank. aber bringt alles nichts. kommt nicht gescheites dabei raus. naja..werd wohl noch probieren müssen oder was auch immer
mfg
ja wie mach ich das mit der countdown anzeige? ich weiße dem text vom label einen wert zu. aber welchen? wenn ich das feld "TimeLeft" da rein mache und es zu ToString(); konvertiere, dann zeigt er zwar die eingegebene zeit an, aber sie läuft nicht rückwärts. sie bleibt halt beim anfangswert stehen. wie kann ich die zeit den rückwärts laufen lassen? Wenn ich die Startzeit - der restzeit mache, dann funktioniert es auch nicht.
mfg
weiß nicht, ob mich richtig verstanden hast. ich stell jetzt noch schnell den quelltext dazu, damit man es sieht, was ich meine 😉
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace TeaTime
{
public partial class Form1 : Form
{
private Timer timer = new Timer();
private TimeSpan TimeLeft = TimeSpan.Zero;
public Form1()
{
InitializeComponent();
// EventHandler für das Tick-Event des Timers registrieren
timer.Tick += new EventHandler(timer_Tick);
}
void timer_Tick(object sender, EventArgs e)
{
prgProgress.PerformStep();
if (prgProgress.Value == prgProgress.Maximum)
{
timer.Enabled = false;
btnStart.Enabled = true;
txtInput.Enabled = true;
btnStop.Enabled = false;
prgProgress.Value = prgProgress.Minimum;
}
}
private void Form1_Load(object sender, EventArgs e)
{
txtInput.Text = "hh:mm";
txtInput.BackColor = Color.White;
lblRestZeit.Text = "hh:mm";
}
private void txtInput_TextChanged(object sender, EventArgs e)
{
if (txtInput.Text == string.Empty)
{
if (txtInput.BackColor != Color.White)
{
txtInput.BackColor = Color.White;
}
if (TimeLeft != TimeSpan.Zero)
{
TimeLeft = TimeSpan.Zero;
}
}
else
{
TimeSpan timeSpan;
bool analyze = TimeSpan.TryParse(txtInput.Text, out timeSpan);
if (analyze)
{
TimeLeft = timeSpan;
if (txtInput.BackColor != Color.LawnGreen)
{
txtInput.BackColor = Color.LawnGreen;
}
}
else
{
if (TimeLeft != TimeSpan.Zero)
{
TimeLeft = TimeSpan.Zero;
}
if (txtInput.BackColor != Color.OrangeRed)
{
txtInput.BackColor = Color.OrangeRed;
}
}
}
}
private void btnStart_Click(object sender, EventArgs e)
{
if (TimeLeft != TimeSpan.Zero)
{
btnStart.Enabled = false;
txtInput.Enabled = false;
timer.Interval = (int)(TimeLeft.TotalMilliseconds / 100);
timer.Enabled = true;
btnStop.Enabled = true;
}
}
private void btnStop_Click(object sender, EventArgs e)
{
if (TimeLeft != TimeSpan.Zero)
{
timer.Stop();
prgProgress.Value = prgProgress.Minimum;
}
btnStart.Enabled = true;
btnStop.Enabled = false;
txtInput.Enabled = true;
txtInput.Focus();
txtInput.Clear();
}
private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void infoToolStripMenuItem1_Click(object sender, EventArgs e)
{
MessageBox.Show("coded by: juppwatis");
}
private void hilfeToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Verwendung: Für \"hh\" müssen Sie die Anzahl der Stunden eintragen und für \"mm\" die Anzahl der Minuten");
}
}
}
und jetzt will ich eben, dass wenn man auf den Start-Button klickt, dass dann der Countdown läuft. nicht nur mit der progressbar der fortschritt angezeigt wird, sondern eben auch, dass der fortschritt in % in der progressbar und der countdown in zahlen neben der progressbar angezeigt wird.
mfg
servus,
will gerade einen teatimer machen. er läuft auch schon schön rund. will jedoch noch ne prozentanzeige in die progressbar machen und nebendran noch eine kl. anzeige, wie lange die zeit noch abläuft.
will beides in labels anzeigen lassen. wird wohl auch das beste sein oder? naja...jedoch weiß ich nicht, wie ich das realisieren kann. weiß nicht, wie ich was konvertieren muss...hat wer tipps?
mfg
und wie mache ich das mit der zeiteingabe?
er muss ja quasi datum, stunde und minute eingeben. werden diese werte alle in EINER txtbox eingegeben oder jeder wert in einer einzelnen?
ich weiß gerade absolut nicht weiter 🙁
hab gedacht, dass ich für die stundenanzahl eine txtbox mache und für die minuten auch eine eigene textbox. doch wie konvertiere ich das nachher, damit ich es, wie auch immer, vergleichen kann, mit der aktuellen zeit? und wie mache ich das mit dem datum?
mfg
hi @ all
versuche gerade einen kl. "Wecker" für mich zu basteln.
will haben, dass der user eine zeit eingibt, bei welcher der "wecker" dann losgehen soll. die aktuelle uhrzeit habe ich dazu schon unten rechts in der windows-form eingebunden und wird jede sek. aktualisiert. außerdem würd ich gern haben, dass der user eine mp3-datei auswählen kann, die als "weck"-oder erinnerungsruf dient.
wie kann ich die zwei sachen realisieren? hab mal nachgeschaut hier. hab unter "wecker" zwar was gefunden, aber kapiere es nicht 🙁
kann mir vll wer ein paar stichwörter sagen oder ein codebsp geben (link?)
wäre nice, wenn man mir helfen könnte. meine probs nochmal:
mfg
hi
die grundfunktionen funktionieren nun bei meinem kleinen taschenrechner. jetzt habe ich das problem, dass man aber noch beliebig viele kommata im eingabefeld machen kann. und das ist ja nicht der sinn der sache!
habe mal die forumssuche benutzt aber nichts gefunden.
vll kann mir wer helfen, und sagen, wie ich es entfernen kann bzw stichwörter sagen, womit es möglich ist dies zu behandlen?
mfg
alles klar wird gemacht 🙂
aber wie löse ich jetzt das problem, dass der operator nicht in das textfeld geschrieben wird?
gibts da auch was, womit man es verhindern kann?
mfg
//EDIT: ist erledigt. kann gecloset werden
Lösung:
e.SuppressKeyPress = true;
mfg
hab jetzt eigene methoden erstellt, die von operation_click aufgerufen werden kann und vom eventhandler.
und den code habe ich überprüft. da ist nirgendwo ein fehler.
wenn ich die buttons auf der form normal klicke, dann wird subtrahiert usw. jedoch nicht, wenn ich es per hand eingeben. das ist schon sehr rätselhaft!
private void txtInput_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Add || e.KeyData == Keys.Oemplus)
{
Add();
}
else if (e.KeyData == Keys.Subtract || e.KeyData == Keys.OemMinus)
{
Minus();
}
else if (e.KeyData == Keys.Multiply || (e.KeyData == Keys.Shift && e.KeyData == Keys.Oemplus))
{
Muliply();
}
else if (e.KeyData == Keys.Divide || (e.KeyData == Keys.Shift && e.KeyData == Keys.Oem7))
{
Divide();
}
}
und hier die methoden:
public void Add()
{
//ruft Rechen-Methode auf
PerformPendingOperation();
//wählt die Operation add von der Enumeration aus
currentOperator = Operator.add;
/*schreibt den aktuellen Wert in eine neue Variable namens lastValue,
* da als nächstes ein neuer Wert eingegeben wird, welcher dann der
* aktuelle Wert sein muss */
lastValue = currentValue;
txtInput.Clear(); //leert den Inhalt der txtBox
}
public void Minus()
{
//ruft Rechen-Methode auf
PerformPendingOperation();
//wählt die Operation sub von der Enumeration aus
currentOperator = Operator.sub;
/*schreibt den aktuellen Wert in eine neue Variable namens lastValue,
* da als nächstes ein neuer Wert eingegeben wird, welcher dann der
* aktuelle Wert sein muss */
lastValue = currentValue;
txtInput.Clear(); //leert den Inhalt der txtBox
}
public void Muliply()
{
//ruft Rechen-Methode auf
PerformPendingOperation();
//wählt die Operation mul von der Enumeration aus
currentOperator = Operator.mul;
/*schreibt den aktuellen Wert in eine neue Variable namens lastValue,
* da als nächstes ein neuer Wert eingegeben wird, welcher dann der
* aktuelle Wert sein muss */
lastValue = currentValue;
txtInput.Clear(); //leert den Inhalt der txtBox
}
public void Divide()
{
//ruft Rechen-Methode auf
PerformPendingOperation();
//wählt die Operation div von der Enumeration aus
currentOperator = Operator.div;
/*schreibt den aktuellen Wert in eine neue Variable namens lastValue,
* da als nächstes ein neuer Wert eingegeben wird, welcher dann der
* aktuelle Wert sein muss */
lastValue = currentValue;
txtInput.Clear(); //leert den Inhalt der txtBox
}
und hier nochmal die methode fürs rechnen:
public void PerformPendingOperation()
{
switch (currentOperator)
{
case Operator.add: //addieren
currentValue = lastValue + currentValue;
break;
case Operator.sub: //subtrahieren
currentValue = lastValue - currentValue;
break;
case Operator.mul: //multiplizieren
currentValue = lastValue * currentValue;
break;
case Operator.div: //dividieren, aber nur, wenn der aktuelle Wert nicht 0 ist
if (currentValue != 0.0)
currentValue = lastValue / currentValue;
break;
}
//wird ausgeführt, wenn das gleichheitszeichen gedrückt wird
currentOperator = Operator.NONE;
//schreibt in die TextBox aus, was gerade in der Variablen currentValue ist
txtInput.Text = currentValue.ToString();
txtInput.Focus(); //setzt den Cursor in die Textbox
}
mfg
//EDIT:
habs jetzt rausgefunden an was es liegt dank debugger:
wenn man die taste - drückt, dann bleibt die vor dem nächsten wert stehen. d.h. es wird dann gerechnet:
und -- = + daher kommt das raus 🙁
JETZT: WIE LÖSE ICH DAS PROBLEM?
mfg
ich habe doch enum verwendet für die einzelnen operationen. und in einer methode ruf ich dann ab, welche operation ausgeführt wird:
private void btnPlu_Click(object sender, EventArgs e)
{
//ruft Rechen-Methode auf
PerformPendingOperation();
//wählt die Operation add von der Enumeration aus
currentOperator = Operator.add;
/*schreibt den aktuellen Wert in eine neue Variable namens lastValue,
* da als nächstes ein neuer Wert eingegeben wird, welcher dann der
* aktuelle Wert sein muss */
lastValue = currentValue;
txtInput.Clear(); //leert den Inhalt der txtBox
hier die methode:
public void PerformPendingOperation()
{
switch (currentOperator)
{
case Operator.add: //addieren
currentValue = lastValue + currentValue;
break;
case Operator.sub: //subtrahieren
currentValue = lastValue - currentValue;
break;
case Operator.mul: //multiplizieren
currentValue = lastValue * currentValue;
break;
case Operator.div: //dividieren, aber nur, wenn der aktuelle Wert nicht 0 ist
if(currentValue != 0.0)
currentValue = lastValue / currentValue;
break;
}
//wird ausgeführt, wenn das gleichheitszeichen gedrückt wird
currentOperator = Operator.NONE;
//schreibt in die TextBox aus, was gerade in der Variablen currentValue ist
txtInput.Text = currentValue.ToString();
txtInput.Focus(); //setzt den Cursor in die Textbox
}
ich verstehe gerade nicht, was an meinem code falsch ist, also warum der eventhandler von oben nicht geht.
hab jetzt auch KeyCode in KeyData verändert...
ok mach das...kannst ihn mir ja dann auch zukommen lassen 😉
ich hab das jetzt so gemacht:
private void txtInput_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Add || e.KeyCode == Keys.Oemplus)
{
btnPlu_Click(this, new EventArgs());
}
else if (e.KeyCode == Keys.Subtract || e.KeyCode == Keys.OemMinus)
{
btnMin_Click(this, new EventArgs());
}
}
das erste geht einwandfrei. wenn ich die plustaste aufm nr.block drücke, wird dann addiert und auch, wenn ich die andere plustaste drücke.
aber wenn ich dann die minus taste drücke, dann gehts nicht bzw er führt auch die plus aktion aus. wo ist der felhler?
es sollte doch eigentlich so gehen oder? ich meine ich mache ja ne abfrage, welche taste gedrückt wird und dann springe ich gegebenfalls in das benötigte feld. oder sehe ich das irgendwie falsch?
mfg
ich denke, dass man 2 events machen muss, dass es geht oder? denke dann würde es gehen...
mfg
und wie stelle ich fest, welcher code kommt, wenn ich die plus taste drücke? ich drücke will aber, dass es geht, wenn ich die plus taste aufm nummernblock, sowie die plustaste in der normalen tatstatur drücke...den wenn man das aufm laptop benutzt, dann hat man meistens kein nummernblock
mfg
servus,
code gerade nen taschenrechner in gui...der geht jetzt auch 🙂
jedoch will ich jetzt noch, dass die anwendung (das txtfeld) auf die tastendrücke von +, -, *, / und ENTER reagiert.
dazu habe ich hier im forum mal ein wenig geforscht und nachgelesen. und auch im openbook nachgelesen. dann habe ich gesehen, dass vermutlich dies die lösung sein würde:
private void txtInput_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Add)
{
btnPlu_Click(this, new EventArgs());
}
}
jedoch passiert nichts, wenn ich das prog starte. wenn ich im textfeld die + - taste drücke, dann passiert nicht, was im btnPlu-Feld steht:
private void btnPlu_Click(object sender, EventArgs e)
{
//ruft Rechen-Methode auf
PerformPendingOperation();
//wählt die Operation add von der Enumeration aus
currentOperator = Operator.add;
/*schreibt den aktuellen Wert in eine neue Variable namens lastValue,
* da als nächstes ein neuer Wert eingegeben wird, welcher dann der
* aktuelle Wert sein muss */
lastValue = currentValue;
txtInput.Clear(); //leert den Inhalt der txtBox
}
wie kann ich das lösen, bzw wie schaffe ich es, dass es geht mit dem tastendruck? wäre nice, wenn mir das wer sagen könnte!
mfg
das hab ich auch schon gemacht...funktioniert zwar, aber denn wird das txtfeld nicht mehr gelöscht. d.h. wenn ich 3+6 rechnen will, dann klicke ich ja denn button 3, dann den button + und dann den button 6.......
private void btnPlu_Click(object sender, EventArgs e)
{
operator1 = Convert.ToDouble(txtInput.Text);
txtInput.Clear();
rechnen.Plus(operator1);
txtInput.Text = rechnen.Result.ToString();
}
gut. wenn ich jetzt aber den button 3 klicke, dann button + und dann den button 6, dann zeigt die textbox erst 36 an, und wenn ich dann wieder auf button + klicke dann steht 39 da. so sollte es aber leider nicht sein 🙁
es soll so sein:
ich klicke buttn 3, dann button +. dann wird das textfeld geleert und dann wenn ich button 6 klicke, dann steht nur noch 6 drin. wenn ich dann buttn = klicke oder irgend einen andern button der rechenoperationen ausführt, dann soll das ergebnis angzeigt werden, wie halt beim rechner von windows...
mfg
servus,
bin gerade dabei, einen rechner neu zu coden mit ner klasse, die die berechnungen ausführt. jedoch habe ich ein problem:
ich habe folgende klasse:
class Rechner
{
private double result = 0.0;
public double Result
{
get
{
return result;
}
}
public void Plus(double op)
{
result += op;
}
public void Minus(double op)
{
result -= op;
}
public void Mal(double op)
{
result *= op;
}
public void Geteilt(double op)
{
if (op != 0.0)
{
result /= op;
}
}
}
und dann folgende instanz:
Rechner rechnen = new Rechner();
alles geht einwandfrei: rechnen.Plus(value), rechnen.Plus(value)
aber wenn ich dann machen will:
rechnen.Result;
um den code anzeigen zu lassen im txtfeld kommt ne fehlermeldung:
Nur assignment-, call-, increment-, decrement- und "new object"-Ausdrücke können als Anweisung verwendet werden.
an was liegt das?
mfg
gibts denn schon nähreres, was gecodet wird? hätte auch starkes interesse daran...
mfg
hab endlich mal ein kl. prog fertig. man kann da daten von personen eingeben. wie der titel schon sagt, ist es ein telefonbuch:
man gibt name, strasse, plz, ort und telefonnr. einer person ein. diese daten werden dann in einer txt datei gespeichert und können dann schön wieder ausgelesen werden beim nächsten programmstart 🙂
hab mir erlaubt einen crosspost zu erlauben, weil ich bisweilen in einem anderen forum noch keine antwort/rückmeldung zum prog erhalten habe. ich hoffe, dass dies "regulär" ist bzw dass das thema nicht gesclossen wird
prog im anhang
mfg
hmm kann mir keine weiterhelfen? das kapitel im openbook ist etwas zu komplex. daher hoffe ich, dass mir sonst wer helfen kann mit eigenen worten und codes vll?! wäre nice
mfg
hi @ all
ich will in einem meiner programme daten, die in einem array gespeichert sind, in einer access datenbank speichern, damit ein wenig struktur darin ist. und auch bei der ausgabe ist dann wieder struktur drin.
wie kann ich verbindung zu einer acces db erlangen? wie kann ich hineinschreiebn und wieder hinauslesen? natürlich alles mittels console
mfg
das mit try catch geht leider nicht, weil dann die variable eingabe nicht mehr in der do-while schleife erkannt wird.
daher hab ich es mal so gelöst:
else if (eingabe != 1 || eingabe != 2 || !beenden)
{
Console.WriteLine("Fehlerhafte Eingabe!");
beenden = true;
if (beenden)
{
Menue();
}
}
jedoch sind da noch nicht die strings mit inbegriffen...wie kann man diese denn auch noch abfangen? so oder so ähnlich?
mfg
ich will aber eigentlich die arrays lassen 🙂
wie kann ich denn mit den arrays struktur reinbekommen?
und wie kann ich beim menü ne abfrage reinmachen, ob NUR zahlen eingegeben werden, damit kein fehler bei der laufzeit kommt?
mfg
hmm nice. das mit der foreachschleife, was mir oben eingefallen ist funktioniert einwandfrei!!
hier mal mein neuer, ziemlich kürzerer code:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace telefonbuch
{
class Program
{
static void Main(string[] args)
{
Menue();
}
static void WriteFile()
{
StreamWriter schreiben = new StreamWriter(@"test.txt", true);
schreiben.Write(Console.ReadLine());
schreiben.Close();
}
static void ReadFile()
{
StreamReader lesen = new StreamReader("test.txt");
while (!lesen.EndOfStream)
{
Console.WriteLine(lesen.ReadLine());
}
lesen.Close();
Console.ReadLine();
}
static void Menue()
{
bool beenden = false;
string[] neueAdresse = new string[6];
neueAdresse[0] = "Name";
neueAdresse[1] = "Vorname";
neueAdresse[2] = "Strasse";
neueAdresse[3] = "Plz";
neueAdresse[4] = "Ort";
neueAdresse[5] = "Telefonnr.";
int eingabe;
string daten;
Console.WriteLine("\t \t Was möchtest du tun? \n\n \t \t -----------------------------");
Console.Write("\n \t \t |###########################|");
Console.Write("\n \t \t |# 1.Neue Adresse eingeben #| \n \t");
Console.Write("\t |# 2.Adresse suchen #| \n \t \t |# 3.Beenden #|" );
Console.Write("\n \t \t |###########################|");
Console.WriteLine("\n \t \t -----------------------------");
eingabe = Int32.Parse(Console.ReadLine());
do
{
if (eingabe == 1 && !beenden)
{
foreach (string adressen in neueAdresse)
{
Console.Write("{0}: ",adressen);
WriteFile();
daten = Console.Read().ToString();
}
beenden = true;
if (beenden)
{
Menue();
}
}
else if (eingabe == 2 && !beenden)
{
ReadFile();
beenden = true;
if (beenden)
{
Menue();
}
}
}
while (eingabe != 3);
}
}
}
so jetzt wäre nice, wenn ich noch irgendwie die ausgabe schön formatieren könnte. dann lässt sich das doch schonmal sehen oder? muss dann zwar noch irgendwie arbeiten, damit das programm beendet wird, wenn man 3 drückt und die fehler ausmerzen (kp wie)
also helft mir doch 🙂
mfg
Original von DavidT
Auch wenn es nicht deine Frage war, dein Design ist eher unvorteilhaft an manchen stellen...
Warum nimmst du für die Abspeicherung der Adressen ein Array von strings und machst nich eine KLasse "Adressen" in dem du die Werte speicherst?
Wenn du die serialisierbar machst, kannst du die auch ganz einfach wegspeichern und wieder einlesen...
Nur mal so als Anmerkung 🙂
hmm das problem ist ja nur, dass ich sowas nicht gar nicht habe. ich bin gerade dabei methoden zu lernen und habe deshalb auch schon ein paar methoden gemacht .wenn ich methoden noch nicth hätte, dann würde alles in der main-methode sein.
aber wäre nice, wenn mir jetzt wer wieder zum thema helfen könnten von wg formatierung und wg der oben angesprochenen schleife
mfg
alles klar...dann hier mal der neue code:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace telefonbuch
{
class Program
{
static void Main(string[] args)
{
Menue();
}
static void WriteFile()
{
StreamWriter schreiben = new StreamWriter(@"test.txt", true);
schreiben.Write(Console.ReadLine());
schreiben.Close();
}
static void ReadFile()
{
StreamReader lesen = new StreamReader("test.txt");
while (!lesen.EndOfStream)
{
Console.WriteLine(lesen.ReadLine());
}
lesen.Close();
Console.ReadLine();
}
static void Menue()
{
bool beenden = false;
string[] neueAdresse = new string[6];
neueAdresse[0] = "Name";
neueAdresse[1] = "Vorname";
neueAdresse[2] = "Strasse";
neueAdresse[3] = "Plz";
neueAdresse[4] = "Ort";
neueAdresse[5] = "Telefonnr.";
int eingabe;
string name, vorname, strasse, plz, ort, telefon;
Console.WriteLine("\t \t Was möchtest du tun? \n\n \t \t -----------------------------");
Console.Write("\n \t \t |###########################|");
Console.Write("\n \t \t |# 1.Neue Adresse eingeben #| \n \t");
Console.Write("\t |# 2.Adresse suchen #| \n \t \t |# 3.Beenden #|" );
Console.Write("\n \t \t |###########################|");
Console.WriteLine("\n \t \t -----------------------------");
eingabe = Int32.Parse(Console.ReadLine());
do
{
if (eingabe == 1 && !beenden)
{
Console.Write("{0}: ", neueAdresse[0]);
WriteFile();
name = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[1]);
WriteFile();
vorname = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[2]);
WriteFile();
strasse = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[3]);
WriteFile();
plz = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[4]);
WriteFile();
ort = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[5]);
WriteFile();
telefon = Console.ReadLine();
beenden = true;
if (beenden)
{
Menue();
}
}
else if (eingabe == 2 && !beenden)
{
ReadFile();
beenden = true;
if (beenden)
{
Menue();
}
}
}
while (eingabe != 3);
}
}
}
wie sollte die schleife aussehen? kann dir nicht ganz folgen? ne foreach-schleife oder?
mfg
hi @ all
bin gerade dabei, so ne art telefonbuch zu machen. bin meiner ansicht nach schon recht weit. ich habe jedoch noch probleme mit der aussgabe. wie kann ich denn eine schöne formatierung reinbekommen? das frage ich mich gerade und komme einfach nicht dahinter, wie ich das machen kann.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace telefonbuch
{
class Program
{
static void Main(string[] args)
{
Menue();
}
static void WriteFile()
{
StreamWriter schreiben = new StreamWriter(@"test.txt", true);
schreiben.Write(Console.ReadLine());
schreiben.Close();
}
static void ReadFile()
{
StreamReader lesen = new StreamReader("test.txt");
while (!lesen.EndOfStream)
{
Console.WriteLine(lesen.ReadLine());
}
lesen.Close();
Console.ReadLine();
}
static void Menue()
{
bool beenden = false;
string[] neueAdresse = new string[6];
neueAdresse[0] = "Name";
neueAdresse[1] = "Vorname";
neueAdresse[2] = "Strasse";
neueAdresse[3] = "Plz";
neueAdresse[4] = "Ort";
neueAdresse[5] = "Telefonnr.";
int eingabe;
string name, vorname, strasse, plz, ort, telefon;
Console.WriteLine("\t \t Was möchtest du tun? \n\n \t \t -----------------------------");
Console.Write("\n \t \t |###########################|");
Console.Write("\n \t \t |# 1.Neue Adresse eingeben #| \n \t");
Console.Write("\t |# 2.Adresse suchen #| \n \t \t |# 3.Beenden #|" );
Console.Write("\n \t \t |###########################|");
Console.WriteLine("\n \t \t -----------------------------");
eingabe = Int32.Parse(Console.ReadLine());
do
{
if (eingabe == 1 && beenden == false)
{
Console.Write("{0}: ", neueAdresse[0]);
WriteFile();
name = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[1]);
WriteFile();
vorname = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[2]);
WriteFile();
strasse = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[3]);
WriteFile();
plz = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[4]);
WriteFile();
ort = Console.ReadLine();
Console.Write("{0}: ", neueAdresse[5]);
WriteFile();
telefon = Console.ReadLine();
beenden = true;
if (beenden == true)
{
Menue();
}
}
else if (eingabe == 2 && beenden == false)
{
ReadFile();
beenden = true;
if (beenden == true)
{
Menue();
}
}
}
while (eingabe != 3);
}
}
}
wäre nice, wenn mir wer helfen könnte und mich noch auf weitere fehler aufmerksam machen könnte
mfg
hi @ all
ich fange gerade mit gui an und habe eigentlich noch keine ahnung davon. da ich mir nen geburtstagstimer proggen möchte, damit ich nicht ständig irgendwelche gebs vergesse hab ich jetzt mal angefangen:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace BdayTimer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void txtName_TextChanged(object sender, EventArgs e)
{
}
private void txtGebTag_TextChanged(object sender, EventArgs e)
{
}
private void btnLoeschen_Click(object sender, EventArgs e)
{
}
private void btnSpeichern_Click(object sender, EventArgs e)
{
}
private void lblName_Click(object sender, EventArgs e)
{
}
private void lblGebDatum_Click(object sender, EventArgs e)
{
}
}
}
so sieht die form aus. was muss ich jetzt beim btnSpeichern einfügen, damit er die eingegebenen daten oben in einer datei (*.csv) speichert?
und was muss ich fürn quellcode einfügen, damit er die eingegebenen sachen wieder löscht (nicht aus der csv - datei)?
vll weiß auch wer, wie ich die daten aus der csv datei dann einlesen kann, um alle gebs anzeigen zu lassen.
ach ja: wenn man den button speichern klickt, sollte auch irgendwie hinterlegt werden, dass am selben tag des gebs ein alarm kommt (wenn das programm denn läuft).
mfg
hi @ all
nachdem ich nun meinen ersten algorithmus geschrieben habe (sieb von eratosthones), will ich "am ball bleiben" und weitermachen. ich bin noch ein anfänger und habe außer den grundlagen (schleifen, variablen) nur die methoden und klassen gelernt bisher. daher frage ich euch:
was für programme könnte ich noch schreiben (auf konsolenbasis), welche ich mit meinen bisherigen mitteln erreichen kann? wäre voll nice, wenn wer ein programm weiß oder so? ich warte hier leicht ungeduldig auf ne antwort 😉 will ja weiterkommen 🙂
mfg
also die 13 zb ist immer dabei bei mir 😉
naja...verstanden hab ich den quellcode aber trotzdem noch nich 🙁
mfg
Original von Cookiie
if(!sieb[i]) //das ! negiert den Ausdruck 2mal false = true { for (int j = i * i; j <= grenze; j = j + i) { sieb[j] = true; } }
Gruß Cookiie
ja richtig, das negiert den ausdruck. aber ich hab ja oben ALLES von 2 - grenze auf false. und er springt doch nur in die if-abfrage, wenn !sieb_. und sieb_ = false, d.h. !sieb_ ist true oder? aber dann kann er doch gar nicht da rein, weil ja alles auf false ist. das verstehe ich nicht
mfg
hi @ all
ich selbst bin gerade dabei c# zu lernen.
hab mir dazu ein buch zugelegt, welches ich recht gut finde. es heißt : "professional c# 2005".
es ist auf englisch, jedoch nicht allzuschwer zu verstehen. wenn man mal eine vokabel nicht weiß, kann man sie halt entweder schnell nachsehen. aber meistens ergibt sich der sinn der vokabl ausm zusammenhang. das buch startet mit den basic (variablen/schleifen usw). und geht dann in die oop (klassen/methoden (hier bin ich gerade)). der stil ist gut zu lesen und flüssig. außerdem ist es auch gut strukturiert. es baut alles schön auf einander auf und hat zwischendurch nicht mal son richtig dicker absatz, sodass man nicht mehr weiß, was jetzt eigentlich sache ist.
also ich kann nur empfehlen sich dieses buch zu kaufen. egal ob anfänger oder fortgeschrittener. es lohnt sich für beide, denn es sind soviele dinge drin. hat ja schließlich auch ~1500 seiten
mfg
so ich hab jetzt mal den pseudocode von wikipedia einfach genommen und geschrieben und siehe da: es funktioniert...hier der code:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
long max;
Console.Write("Bitte geben Sie eine Grenze ein: ");
max = Int32.Parse(Console.ReadLine());
Primzahlen(max);
Console.WriteLine("\n\nPress ENTER to leave");
Console.ReadLine();
}
static void Primzahlen(long grenze)
{
int i;
bool[] sieb = new bool[grenze + 1];
for (i = 2; i <= grenze; i++)
{
sieb[i] = false;
}
i = 2;
while (i*i <= grenze)
{
if(!sieb[i])
{
for (int j = i * i; j <= grenze; j = j + i)
{
sieb[j] = true;
}
}
i++;
}
for (i = 2; i <= grenze; i++)
{
if (!sieb[i])
{
Console.Write(i + " ");
}
}
}
}
}
jedoch habe ich jetzt noch verständnis fragen:
1.
for (i = 2; i <= grenze; i++)
{
sieb[i] = false;
}
hier wird doch alles auf false gestellt oder? also alle zahlen > 2 werden auf false gestellt. wie kann es dann überhaupt noch gehen weiter unten gehen?
wie kann denn die if-abfrage noch gehen:
while (i*i <= grenze)
{
if(!sieb[i])
{
for (int j = i * i; j <= grenze; j = j + i)
{
sieb[j] = true;
}
}
i++;
}
die abfrage wird ja nur gemacht, wenn die werte von sieb_ true sind oder? aber oben haben wir ja alle bis zur grenze auf false gestellt. das geht doch nicht?
kann mir das wer erklären? da verstehe ich absolut nicht. das programm läuft einwandfrei das hab ich schon probiert 😉 und ich denke ihr seht das auch, wenn ich c# checkt. aber für ich als anfänger ist es so gut wie unmöglich, den code nachzuvollziehen. wäre nice, wenn mir vll sogar jmd den vollständigen code, also nur die primzahlen-methode ausführlichst kommentiert.
mfg
mir ist gerade eine neue idee gekommen um den algorithmus zu realisieren:
also erst alle werte auf true stellen, außer 0 und 1. dann wird per while - schleife gesucht, was die nächste zahl ist, die noch true ist. hat man die gefunden wir die methode "vielfacheBerechnen" benutzt, um von der zahl alle vielfache zu berechnen. diese werden dann in einem neue array gespeichert und auf false gestellt. danach geht das ganze, also die while - schleife wieder von vorne los, bis der zähler der for - schleife, in welcher die while-schleife ist, gleich groß wie der eingegebnen grenzwert ist. wie findet ihr diese idee? kann man mit damit den algorithmus von eratosthenes verwirklichen?
mfg
ich hab da gerade im internet nen code gefunden. jedoch verstehe ich ihn nicht ganz:
using System;
namespace Org.Wikibooks.De.CSharp.Schleifen
{
class Program
{
static void Main(string[] args)
{
const long grenze = 1000; // Obergrenze festlegen
bool[] gestrichen = new bool[grenze / 2 + 1];
gestrichen.Initialize();
long aktuellerWert = 3; // Startwert setzen
while (aktuellerWert <= grenze)
{
if (!gestrichen[aktuellerWert / 2 - 1])
{
// i ist prim
Console.Write("{0}{1}", ((aktuellerWert != 3) ? ", " : ""), aktuellerWert);
// Streiche seine Vielfache, beginne mit i*i
for (long testWert = aktuellerWert * aktuellerWert; testWert <= grenze; testWert += aktuellerWert)
{
gestrichen[testWert / 2 - 1] = true;
}
aktuellerWert += 2;
while ((aktuellerWert < grenze) && (gestrichen[aktuellerWert/2 - 1]))
aktuellerWert += 2;
}
}
Console.WriteLine("\nBerechnung beendet.\n[ENTER]");
Console.ReadLine();
}
}
}
bool[] gestrichen = new bool[grenze / 2 + 1];
gestrichen.Initialize();
if (!gestrichen[aktuellerWert / 2 - 1])
Console.Write("{0}{1}", ((aktuellerWert != 3) ? ", " : ""), aktuellerWert);
gestrichen[testWert / 2 - 1] = true;
quasi ein großteil des codes ist sehr unverständlich für mich als anfänger...vll kann mir ja jmd helfen das herauszufiltern, damit ich verstehe, was der da eigenltich macht. denn einfach kopieren ist ja scheiße wenn mans nicht versteht. und ich will es eben verstehen, sonst bräuchte ich gar nicht anfagen c# zu lernen
mfg
wie gesagt danke.
aber diene for-schleife bringt mich irgendwie absolut nicht weiter. ich weiß nicht, was die für einen sinn macht. liegt vermutlich daran, dass ich halt ein absoluter anfänger bin.
dazu kommt, dass ich kp hab, was ich für ne berechnung machen soll!? klar ich soll schauen ob es eine primzahl ist oder nicht, aber kp
naja danke für deine mühen auf jeden fall...ist irgendiwe zu kompliziert für mich
mfg
danke mal. bringt mich zwar absolut nicht weiter...deine methode berechnung() sagt mir gar nichts und ich weiß immernoch nicht, wie ich die nächste zahl finde, die noch auf true gestellt ist 🙁
aber vielen dank...ich versucheinfach ein wenig rum
also soweit bin ich schonmal: ich denke, dass es soweit doch stimmen sollte:
using System;
using System.Collections.Generic;
using System.Text;
namespace SiebDesEratosthenes
{
class Program
{
static void Main(string[] args)
{
int max;
Console.Write("Bitte geben Sie eine Grenze ein: ");
max = Int32.Parse(Console.ReadLine());
Primzahlen(max);
Console.ReadLine();
}
static void Primzahlen(int grenze)
{
bool[] sieb = new bool[grenze + 1];
int i, j;
for (i = 2; i <= grenze; i = i + 2)
{
sieb[i] = false; //keine Primzahlen
}
}
}
}
der hier zu sehende code deckt meiner ansicht nach pkt 1 - 4 ab oder?
jetzt würde ich zu pkt 5 kommen, aber kp wie ich das machen soll. wie finde ich jetzt die nächste zahl, die noch auf true ist (in dem fall 3)? mit while (!sieb_) oder so? ich weiß es nicht...bitte helft mir
@cookie:
ja, ich weiß, dass der quellcode oben nicht den sieb darstellt. der quellcode oben ist einfach ein normaler primzahlrechner. aber ich will jetzt auch den sieb irgendwie programmieren. aber ich habe keine ahnung wie ich das machen soll...deshalb habe ich ja folgendes geschrieben:
ich versuche gerade noch nen neuen primzahlrechner zu schreiben, der die primzahlen mittels sieb des eratosthenes berechnet. hab mir das mal so grob vorgestellt:
- grenze eingeben
- bool array erstellen mit der größe der grenze
- array auf true stellen, außer 0,1,2, da sonst alle darin enthaltenen zahlen ne primzahl sein können.
- alle vielfachen von 2 bis zur grenze berechnen und anschließend auf false stellen, da sie keine primzahlen sein können.
- nächste zahl suchen, die noch auf true gestellt ist -> nächste primzahl
- alle vielfachen, der eben gefundenen primzahl berechnen bis zur grenze.
- und das wiederholt sich halt immer wieder[dürfte ja bekannt sein glaube ich]
so jetzt habe ich allerdings probleme das umzusetzen.
pkt. 3: wie kann ich alle werte außer 0,1,2 auf true stellen?
4. wie kann ich die vielfachen berechnen und diese danach auf false stellen?
5. wie finde ich die nächste zahl, die noch auf true ist?wäre nice, wenn mir jmd helfen könnte. komme echt nicht weiter und sitze schon lang an der aufgabe (die ich mir selbst gestellt habe smile )
ich weiß nämlich nicht, wie ich das verwikrlichen soll mit dem sieb des eratosthenes. hab schon vieles versucht aber nichts funktioniert. deshalb suche ich gerade hier nach hilfe...wäre als nice, wenn mir wer noch helfen könnte zum neuen prob: der sieb des eratosthenes proggen 🙂 (siehe probleme oben (1., 2., 3., usw.))
mfg
hi @ all
bin noch anfänger in c#...hab mich deshalb mal hingesetzt und nen kl. primzahlrechner geschrieben. hier der code:
using System;
namespace primzahl
{
class Program
{
public static void Main(string[] args)
{
int divisor;
bool istEinePrimzahl;
int testeZahl;
ConsoleKeyInfo eingabe = new ConsoleKeyInfo();
Console.Write("Primzahlenrechner");
do
{
Console.Write("\n\nGeben Sie eine Zahl ein: ");
testeZahl = Int32.Parse(Console.ReadLine());
istEinePrimzahl = true; //Wert auf TRUE setzen, damit in Schleife verwendbar
//Schleifenabfrage: Eingabe durch alle Zahlen zw. 2 und der Eingaben teilen
for (divisor = 2; divisor < testeZahl && istEinePrimzahl; divisor++)
{
//Wenn die Eingabe durch etwas teilbar ist und es kommt 0 raus...
if (testeZahl % divisor == 0)
{
//...dann ist es keine Primzahl
Console.WriteLine("{0} ist keine Primzahl\n", testeZahl);
istEinePrimzahl = false;
}
}
//Wenn es eine Primzahl ist, dann als eine solche ausgeben
if (istEinePrimzahl)
{
Console.WriteLine("{0} ist eine Primzahl\n", testeZahl);
}
Console.Write("Wollen Sie noch eine Zahl testen? (J/N)");
eingabe = Console.ReadKey();
}
while (eingabe.Key==ConsoleKey.J);
Console.Write("\n\nPress any key to continue...");
Console.ReadKey(true);
}
}
}
was meint ihr dazu? ist der code um primzahlen zu berechnen eher gut oder eher schlecht? also die richtigen ergebnisse kommen ja raus. aber wenn man ne zu große zahl eingibt, dann kommt ne fehlermeldung 🙁 kp wie ich das behandeln kann...leider.
jetzt noch ne frage:
ich versuche gerade nen neuen primzahlrechner zu schreiben, der die primzahlen mittels sieb des eratosthenes berechnet. hab mir das mal so grob vorgestellt:
so jetzt habe ich allerdings probleme das umzusetzen.
pkt. 3: wie kann ich alle werte außer 0,1,2 auf true stellen?
4. wie kann ich die vielfachen berechnen und diese danach auf false stellen?
5. wie finde ich die nächste zahl, die noch auf true ist?
wäre nice, wenn mir jmd helfen könnte. komme echt nicht weiter und sitze schon lang an der aufgabe (die ich mir selbst gestellt habe 🙂 )
mfg
so habe es jetzt aktualisiert:
das mit ner zahl kleiner 1 und oder ein buchstabe habe ich leider noch nicht lösen können. hab ewig gesucht und versucht, abe finde einfach nichts wie ich das lösen könnte.
mfg
hi @all
bin ein absoulter anfänger in c#. bin deshalb auf der suche nach ideen, die ich verwirklich könnte. sollte so im rahmen sein wie mein schere-stein-papier - spiel, das ich gerade reingestellt habe. hoffe dass vll jmd was für mich hat. wäre echt nice...
mfg