Пользователь
Регистрация: 25.11.2013
Сообщений: 14
Индекс находился вне границ массива
Такая проблема - выскакивает месседж о том, что индекс находился вне границ массива, как только дело доходит до добавления колонок в первом цикле. Написал две проги, одинаковые, с одним отличием, что одна из них имеет модальное окно и часть компонентов в отличие от первой проги перенесены на это самое окно. Но прога однооконная работает как нужено, что не скажешь о второй, хотя основной код прописан так же.
По заданию данные (числа, построчно, 24 числа) заносятся в таблицу(колонка "объем"), в которой 5 столбцов: год (2009 и 2010), месяц, объем, цена, доход.
Многооконная:
Код:
using System...;
namespace KURS
{
public partial class Chart : Form
{
public Chart()
{
InitializeComponent();
createGistTable();
}
Form1 f1 = new Form1();
private void Chart_Load(object sender, EventArgs e)
{
tabPage1.Text = "Гистограмма";
tabPage2.Text = "Таблица";
createGistTable();
}
void createGistTable()
{
double price_2009 = 1.1;
double price_2010 = 1.5;
string[] mass_year_2009 = { "2009", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };
string[] mass_year_2010 = { "2010", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };
int[] mass_month = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
// Массив чисел из textBox
double[] mass_mount = f1.textBox1.Lines.Where(s => !string.IsNullOrWhiteSpace(s)).Select(n => double.Parse(n)).ToArray();
// Расчет дохода с учетом варианта согласно условию, далее конвертация результатов в массив
double[] mass_income_09 = mass_mount.Select(i => (((i * 4) / 5) * price_2009)).ToArray();
double[] mass_income_10 = mass_mount.Select(i => (((i * 4) / 5) * price_2010)).ToArray();
// 2009
for (int n = 0; n < 12; n++)
{
dataGridView1.Rows.Add(mass_year_2009[n], mass_month[n], mass_mount[n], price_2009, mass_income_09[n]);
}
// 2010
for (int n = 0; n < 12; n++)
{
dataGridView1.Rows.Add(mass_year_2010[n], mass_month[n], mass_mount[n], price_2010, mass_income_10[n]);
}
}
}
}
Однооконная:
Код:
using System...;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
double price_2009 = 1.1;
double price_2010 = 1.5;
private void Form1_Load(object sender, EventArgs e)
{
}
// GO
private void button1_Click(object sender, EventArgs e)
{
string[] mass_year_2009 = { "2009", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };
string[] mass_year_2010 = { "2010", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };
int[] mass_month = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
// Массив чисел из textBox
double[] mass_mount = textBox1.Lines.Where(s => !string.IsNullOrWhiteSpace(s)).Select(n => double.Parse(n)).ToArray();
// Расчет дохода с учетом варианта согласно условию
double[] mass_income_09 = mass_mount.Select(i => (((i * 4) / 5) * price_2009)).ToArray();
double[] mass_income_10 = mass_mount.Select(i => (((i * 4) / 5) * price_2010)).ToArray();
for (int n = 0; n < 12; n++)
{
dataGridView1.Rows.Add(mass_year_2009[n], mass_month[n], mass_mount[n], price_2009, mass_income_09[n]);
chart1.Series[0].Points.AddY(mass_income_09[n]);
chart1.Series[1].Points.AddY(mass_income_09[n]);
chart1.Series[2].Points.AddY(mass_income_09[n]);
chart1.Series[3].Points.AddY(mass_income_10[n]);
chart1.Series[4].Points.AddY(mass_income_10[n]);
chart1.Series[5].Points.AddY(mass_income_10[n]);
}
}
private void button2_Click(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
OpenFileDialog OFD = new OpenFileDialog();
OFD.Filter = "TXT|*.txt";
if (OFD.ShowDialog() == DialogResult.OK)
{
StreamReader SR = new StreamReader(OFD.FileName);
textBox1.Text = SR.ReadToEnd();
SR.Close();
}
}
}
}
Проблема с занесением данных из textBox1 в таблицу, а так же и с занесением массива доходов. Но я так понимаю, если решу первую ошибку, то вторая сама собой решится.
Вложения
01.rar (118.4 Кб, 6 просмотров)
02.rar (51.8 Кб, 6 просмотров)
Последний раз редактировалось Pikovaya_dama; 26.11.2014 в 02:48 .