I have this very long code, which is works more or less.
问题在于它没有写入文本文件,并且当我打开FrmDc
FrmMarvel
时也会打开。显示我关闭FrmDc
Index was outside the bounds of the arrays
消息时的某些原因。有什么事吗
读取也或多或少地起作用,因为当我将一些信息写入文本框,并且源文件包含详细信息时,它将复制现有文本。
我想我可以删除部分代码,但是我不确定是哪一部分。
namespace Kepregenybolt
{
public partial class Form1 : Form
{
List<CsMarvel> kLista = new List<CsMarvel>();
StreamWriter sW;
public Form1()
{
InitializeComponent();
cbKiado.Items.Add("Marvel");
cbKiado.Items.Add("DC");
try
{
StreamReader sR = new StreamReader("kepregenyek.txt", Encoding.UTF8);
while (!sR.EndOfStream)
{
string sor = sR.ReadLine();
string[] s = sor.Split(';');
if (s.Length == 5)
{
CsMarvel h = new CsMarvel(s[0],
s[1],
s[2],
Convert.ToInt32(s[3]),
Convert.ToInt32(s[4]));
kLista.Add(h);
}
else
{
CsDc h = new CsDc(s[0],
s[1],
s[2],
Convert.ToInt32(s[3]),
Convert.ToInt32(s[4]),
s[5]);
kLista.Add(h);
}
}
sR.Close();
foreach (CsMarvel item in kLista)
{
listBox1.Items.Add(item.listába());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void cbKiado_SelectedIndexChanged(object sender, EventArgs e)
{
FrmMarvel a = new FrmMarvel(kLista);
if (cbKiado.Text.Equals("Marvel")) ;
a.ShowDialog();
try
{
StreamReader sR = new StreamReader("kepregenyek.txt", Encoding.UTF8);
while (!sR.EndOfStream)
{
string sor = sR.ReadLine();
string[] s = sor.Split(';');
CsMarvel l = new CsMarvel(s[0], s[1], s[2], Convert.ToInt32(s[3]), Convert.ToInt32(s[4]));
kLista.Add(l);
}
sR.Close();
foreach (CsMarvel item in kLista)
{
listBox1.Items.Add(item.listába());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
if (cbKiado.Text.Equals("DC"));
{
FrmDc b = new FrmDc(kLista);
b.ShowDialog();
try
{
StreamReader sR = new StreamReader("kepregenyek.txt", Encoding.UTF8);
while (!sR.EndOfStream)
{
string sor = sR.ReadLine();
string[] s = sor.Split(';');
CsDc l = new CsDc(s[0], s[1], s[2], Convert.ToInt32(s[3]), Convert.ToInt32(s[4]), s[5]);
kLista.Add(l);
}
sR.Close();
foreach (CsDc item in kLista)
{
listBox1.Items.Add(item.listába());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void FrmMarvel_FormClosing(object sender, FormClosedEventArgs e)
{
sW = new StreamWriter("kepregenyek.txt", false, Encoding.UTF8);
foreach (CsMarvel item in kLista)
{
sW.WriteLine(item.fájlba());
}
sW.Close();
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
CsMarvel如下:
public class CsMarvel
{
string cim;
string iro;
string rajzolo;
int megjelenes;
int ar;
public CsMarvel(string cim, string iro, string rajzolo, int megjelenes, int ar)
{
this.cim = cim;
this.iro = iro;
this.rajzolo = rajzolo;
this.megjelenes = megjelenes;
this.ar = ar;
}
public virtual string fájlba()
{
return this.cim + ";" + this.iro + ";" + this.rajzolo + ";" + this.megjelenes + ";" + this.ar;
}
public virtual string listába()
{
return this.cim + ":" + this.iro + " " + this.rajzolo + " kiadó Kiadva:" + this.megjelenes + " " + this.ar + " Ft";
}
public string Cim
{
get
{
return cim;
}
set
{
cim = value;
}
}
public string Iro
{
get
{
return iro;
}
set
{
iro = value;
}
}
public string Rajzolo
{
get
{
return rajzolo;
}
set
{
rajzolo = value;
}
}
public int Megjelenes
{
get
{
return megjelenes;
}
set
{
megjelenes = value;
}
}
public int Ar
{
get
{
return ar;
}
set
{
ar = value;
}
}
}
}
CsDc还有一个额外的数组。
答案 0 :(得分:0)
我认为您由于if...
中的cbKiado_SelectedIndexChanged()
而重复了
if (cbKiado.Text.Equals("DC"));
{
...
}
仅当文本为;
时,才想运行{...}
代码块,则需要删除DC
。您现在遇到的情况是,在真实情况下运行空块并始终运行{...}
。我想这将使文件读取两次。