Hallo ich habe ein Programm in C# geschrieben, welches bis jetzt ohne Fehler funktionierte.
Jetzt musste ich jedoch den Rechner auf dem das Programm läuft neu aufsetzen.
Seit dem kommt bei einigen durchläufen ein Fehler, jedoch nicht immer.
Leider kann ich mit der Fehlermeldung nicht viel anfangen, außer das es um die lenge von dem String geht.
Fehlermeldung:
Wie kann ich den Fehler beheben?
Warum tritt er erst jetzt auf und dann nur sporadisch?
Programmcode:
Danke für eure Hilfe :-)
Jetzt musste ich jedoch den Rechner auf dem das Programm läuft neu aufsetzen.
Seit dem kommt bei einigen durchläufen ein Fehler, jedoch nicht immer.
Leider kann ich mit der Fehlermeldung nicht viel anfangen, außer das es um die lenge von dem String geht.
Fehlermeldung:
Code:
Informationen über das Aufrufen von JIT-Debuggen
anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.
************** Ausnahmetext **************
System.ArgumentOutOfRangeException: Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen.
Parametername: length
bei System.String.Substring(Int32 startIndex, Int32 length)
bei WindowsFormsApplication1.Getränke.eingabe_box_KeyDown(Object sender, KeyEventArgs e)
bei System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
bei System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
bei System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
bei System.Windows.Forms.Control.WmKeyChar(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.TextBoxBase.WndProc(Message& m)
bei System.Windows.Forms.TextBox.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Geladene Assemblys **************
mscorlib
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.34014 built by: FX45W81RTMGDR.
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
----------------------------------------
LZ44
Assembly-Version: 1.0.0.0.
Win32-Version: 1.0.0.0.
CodeBase: file:///C:/Users/Fabian/AppData/Local/Apps/2.0/5DZC8VP2.LD5/3YPTOGAW.CO1/lz44..tion_592a06ceafe83fbe_0000.005f_cb10a390818e9332/LZ44.exe.
----------------------------------------
System.Windows.Forms
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.33440 built by: FX45W81RTMREL.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
----------------------------------------
System.Drawing
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.33440 built by: FX45W81RTMREL.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
----------------------------------------
System
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.34003 built by: FX45W81RTMGDR.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
----------------------------------------
System.Configuration
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.33440 built by: FX45W81RTMREL.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
----------------------------------------
System.Xml
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.33440 built by: FX45W81RTMREL.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
----------------------------------------
mscorlib.resources
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.33440 built by: FX45W81RTMREL.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
----------------------------------------
System.Windows.Forms.resources
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.33440 built by: FX45W81RTMREL.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
----------------------------------------
************** JIT-Debuggen **************
Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
Konfigurationsdatei der Anwendung oder des Computers
(machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.
Zum Beispiel:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
Ausnahmen an den JIT-Debugger gesendet, der auf dem
Computer registriert ist, und nicht in diesem Dialogfeld behandelt.
Wie kann ich den Fehler beheben?
Warum tritt er erst jetzt auf und dann nur sporadisch?
Programmcode:
Code:
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace WindowsFormsApplication1
{
public partial class Getränke : Form
{
public Getränke()
{
InitializeComponent();
using (StreamWriter erstellen = new StreamWriter(Global.FILENAME_RUNDE))
erstellen.WriteLine("");
}
private void label2_Click(object sender, EventArgs e)
{
}
private void eingabe_box_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string searchfor = Convert.ToString(eingabe_box.Text);
string line;
name.Text = searchfor;
if (Global.global_line < 1)
{
Global.global_barcode = "";
Global.global_guthaben = "";
Global.global_user = "";
Global.global_wert = "";
warnung.Visible = false;
}
using (StreamReader tr = new StreamReader(Global.FILENAME_USER))
using (StreamReader bu = new StreamReader(Global.FILENAME_WERTE))
// Wenn kein User eingetragen, wird Barcode auf Zusammengehörigkeit mit einem User geprüft
if (Global.global_user == "")
{
{
while ((line = tr.ReadLine()) != null)
{
Global.global_line++;
string[] splittedString = line.Split('#');
if (splittedString[0] == searchfor)
{
name.Text = splittedString[1];
guthaben_form1.Text = splittedString[2];
Global.global_barcode = splittedString[0];
Global.global_user = splittedString[1];
Global.global_guthaben = splittedString[2];
Global.global_wert = splittedString[2];
double guthaben = Convert.ToDouble(Global.global_guthaben);
DateTimePicker datetime = new DateTimePicker();
Global.uhrzeit = datetime.Value.ToString("dd.MM.yy HH:mm:ss");
if (guthaben >= 0)
{
// using (StreamWriter file = new StreamWriter(Global.FILENAME_LOG, true))
// file.WriteLine("[{0}] {1} hat noch {2}€ Guthaben!", Global.uhrzeit, Global.global_user, Global.global_guthaben);
}
else
{
using (StreamWriter file = new StreamWriter(Global.FILENAME_LOG, true))
file.WriteLine("[{0}] {1} hat Schulden! Bitte Umgehend Bezahlen!", Global.uhrzeit, Global.global_user, Global.global_guthaben);
}
eingabe_box.Text = "";
//double guthaben = Convert.ToDouble(global_guthaben);
// GUthaben kleiner 5€ dann warnung einblenden
if (guthaben < 0)
{
warnung.Visible = true;
ausgabeFenster.BackColor = Color.Red;
ausgabeFenster.ForeColor = Color.White;
}
else
{
warnung.Visible = false;
ausgabeFenster.BackColor = Color.White;
ausgabeFenster.ForeColor = Color.Black;
}
Global._t = new Timer();
Global._t.Interval = 1000;
Global._t.Tick += new EventHandler(_t_Tick);
Global._t.Start();
Global._ticks = 0;
}
else
{
eingabe_box.Text = "";
}
}
}
}
// Dem User wird ein Getränk zugewiesen
else if (Global.global_user != "")
{
while ((line = bu.ReadLine()) != null)
{
string[] splittedWerte = line.Split('#');
Global.global_line = 0; // Wenn die Variable am Schleifenende == 0 ist wird der Personen-Barcode gecheckt
// Überprüfen ob der Getränkecode funktioniert.
if (splittedWerte[0] == searchfor)
{
double guthaben = 0;
guthaben = Convert.ToDouble(Global.global_guthaben);
Global.wert = Convert.ToDouble(splittedWerte[2]);
guthaben = guthaben + Global.wert;
Global.global_guthaben = Convert.ToString(guthaben);
// Festlegen ob Aufladung oder Abbuchung
DateTimePicker datetime = new DateTimePicker();
Global.uhrzeit = datetime.Value.ToString("dd.MM.yy HH:mm:ss");
using (StreamWriter file = new StreamWriter(Global.FILENAME_LOG, true))
if (Global.wert < 0)
{
if (Global.wert == -20)
{
Runde.Visible = true;
runden_box.Visible = true;
runden_box.ForeColor = Color.Red;
spender.Visible = true;
spender.ForeColor = Color.Red;
Global.runde_user = Global.global_user;
file.WriteLine("[{0}] {1} hat eine Runde Gegeben!", Global.uhrzeit, Global.runde_user);
// runden_box.Text = "Dank für die Runde geht an:" + Environment.NewLine + "test"+ Global.runde_user;
using (StreamWriter round = new StreamWriter(Global.FILENAME_RUNDE, true))
round.WriteLine(Global.runde_user);
using (StreamReader sr = File.OpenText(Global.FILENAME_RUNDE))
{
String ausgabe;
while ((ausgabe = sr.ReadLine()) != null)
{
runden_box.Text = sr.ReadToEnd();
//runden_box.SelectionStart = runden_box.Text.Length;
//runden_box.ScrollToCaret();
}
}
Global.rnd = new Timer();
Global.rnd.Stop();
Global.rnd.Interval = 1000;
Global.rnd.Tick += new EventHandler(rnd_Tick);
Global.rnd.Start();
Global.rnd_ticks = 0;
}
else
{
file.WriteLine("[{0}] {1} hat {2} getrunken", Global.uhrzeit, Global.global_user, splittedWerte[1]);
}
}
else if (Global.wert > 0)
{
Form4 frm = new Form4();
frm.Show();
}
// Änderungen in der Textdatei speichern
StreamReader einfuegen = File.OpenText(Global.FILENAME_USER);
string inhalt = einfuegen.ReadToEnd();
einfuegen.Close();
tr.Close();
string[] guthaben_begrenzung = Global.global_guthaben.Split(',');
string teil1 = guthaben_begrenzung[0];
string teil2 = guthaben_begrenzung[1];
string begrenzung;
begrenzung = teil2;
Global.global_guthaben = guthaben_begrenzung[0]+","+begrenzung;
string alt = Global.global_barcode + "#" + Global.global_user + "#" + Global.global_wert;
string neu = Global.global_barcode + "#" + Global.global_user + "#" + Global.global_guthaben;
inhalt = inhalt.Replace(alt, neu);
StreamWriter speichern = File.CreateText(Global.FILENAME_USER);
speichern.Write(inhalt);
speichern.Close();
// Ende des Speicherns
Global.global_wert = Global.global_guthaben;
eingabe_box.Text = ""; //Textbox wird geleert
name.Text = Global.global_user; // Name anpassen
guthaben_form1.Text = Global.global_guthaben; // Neues Guthaben ausgeben
Global.global_line = 1;
break;
Global._t.Stop();
Global._t = new Timer();
Global._t.Interval = 1000;
Global._t.Tick += new EventHandler(_t_Tick);
Global._t.Start();
Global._ticks = 0;
}
else
{
eingabe_box.Text = "";
}
}
// Vermeidet das 2. benötigte Enter fals es kein getränkbarcode ist
if (Global.global_line < 1)
{
Global.global_barcode = "";
Global.global_guthaben = "";
Global.global_user = "";
Global.global_wert = "";
//SendKeys.Send("{ENTER}");
while ((line = tr.ReadLine()) != null)
{
Global.global_line++;
string[] splittedString = line.Split('#');
if (splittedString[0] == searchfor)
{
name.Text = splittedString[1];
guthaben_form1.Text = splittedString[2];
Global.global_barcode = splittedString[0];
Global.global_user = splittedString[1];
Global.global_guthaben = splittedString[2];
Global.global_wert = splittedString[2];
double guthaben = Convert.ToDouble(Global.global_guthaben);
DateTimePicker datetime = new DateTimePicker();
Global.uhrzeit = datetime.Value.ToString("dd.MM.yy HH:mm:ss");
if (guthaben >= 0)
{
// using (StreamWriter file = new StreamWriter(Global.FILENAME_LOG, true))
// file.WriteLine("[{0}] {1} hat noch {2}€ Guthaben!", Global.uhrzeit, Global.global_user, Global.global_guthaben);
}
else
{
using (StreamWriter file = new StreamWriter(Global.FILENAME_LOG, true))
file.WriteLine("[{0}] {1} hat Schulden! Bitte Umgehend Bezahlen!", Global.uhrzeit, Global.global_user, Global.global_guthaben);
}
eingabe_box.Text = "";
if (guthaben < 0)
{
warnung.Visible = true;
ausgabeFenster.BackColor = Color.Red;
ausgabeFenster.ForeColor = Color.White;
}
else
{
warnung.Visible = false;
ausgabeFenster.BackColor = Color.White;
ausgabeFenster.ForeColor = Color.Black;
}
Global._t.Stop();
Global._t = new Timer();
Global._t.Interval = 1000;
Global._t.Tick += new EventHandler(_t_Tick);
Global._t.Start();
Global._ticks = 0;
}
}
}
}
}
if (!File.Exists(Global.FILENAME_LOG))
{
Console.WriteLine("{0} existiert nicht!", Global.FILENAME_LOG);
}
using (StreamReader sr = File.OpenText(Global.FILENAME_LOG))
{
String ausgabe;
while ((ausgabe = sr.ReadLine()) != null)
{
ausgabeFenster.Text = sr.ReadToEnd();
ausgabeFenster.SelectionStart = ausgabeFenster.Text.Length;
ausgabeFenster.ScrollToCaret();
}
}
}
void rnd_Tick(object sender, EventArgs e)
{
Global.rnd_ticks++;
if (Global.rnd_ticks == 10000)
{
runden_box.Visible = false;
Runde.Visible = false;
spender.Visible = false;
System.IO.File.Delete(Global.FILENAME_RUNDE);
//System.IO.File.Create(Global.FILENAME_RUNDE);
using (StreamWriter erstellen = new StreamWriter(Global.FILENAME_RUNDE))
erstellen.WriteLine("");
}
}
private void hinzufügenToolStripMenuItem_Click(object sender, EventArgs e)
{
anlage_nutzer frm = new anlage_nutzer();
frm.Show();
}
private void hinzufügenToolStripMenuItem1_Click(object sender, EventArgs e)
{
getraenke_anlegen frm = new getraenke_anlegen();
frm.Show();
}
private void übersichtToolStripMenuItem_Click(object sender, EventArgs e)
{
uebersicht_Getraenke frm = new uebersicht_Getraenke();
frm.Show();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
menuStrip1.Visible = true;
}
private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
menuStrip1.Visible = false;
}
void _t_Tick(object sender, EventArgs e)
{
Global._ticks++;
label5.Text = Convert.ToString(Global._ticks);
if (Global._ticks == 30)
{
Global._t.Stop();
// _t.Enabled = false;
Global._ticks = 0;
Global.global_barcode = "";
Global.global_guthaben = "";
Global.global_user = "";
Global.global_wert = "";
eingabe_box.Text = "";
guthaben_form1.Text = "";
SendKeys.Send("{ENTER}");
warnung.Visible = false;
ausgabeFenster.BackColor = Color.White;
ausgabeFenster.ForeColor = Color.Black;
}
}
private void label4_Click(object sender, EventArgs e)
{
}
private void testToolStripMenuItem1_Click(object sender, EventArgs e)
{
Form4 frm = new Form4();
frm.Show();
}
private void changelogToolStripMenuItem_Click(object sender, EventArgs e)
{
Form5 frm = new Form5();
frm.Show();
}
}
}
public class Global
{
public const string FILENAME_LOG = @"g:\\44\\logfile.lz44";
public const string FILENAME_USER = @"g:\\44\user.lz44";
public const string FILENAME_WERTE = @"g:\\44\werte.lz44";
public const string FILENAME_CHLOG = @"g:\\44\\changelog.txt";
public const string FILENAME_RUNDE = @"g:\\44\\runde.lz44";
public static string uhrzeit = "";
public static string global_user = "";
public static string global_barcode = "";
public static string runde_user = "";
public static string global_guthaben = "";
public static string global_wert = "";
public static int global_line = 0;
public static double wert = 0;
public static Timer _t;
public static int _ticks = 0;
public static Timer rnd;
public static int rnd_ticks = 0;
}
Danke für eure Hilfe :-)