Member 14739007 Ответов: 1

Всякий раз, когда я нажимаю кнопку печати, возникает эта ошибка


Необработанное исключение типа 'System.Об' произошел в mscorlib.dll

Дополнительная информация: индекс и длина должны ссылаться на местоположение внутри строки.

Что я уже пробовал:

общественного недействительными CreateReceipt(объект отправителя, система.Рисование.Печатание.PrintPageEventArgs e)
{

int total = 0;
поплавок наличными = поплавок.Синтаксический анализ(txtCash.Текст.Подстрока(1,5)); //ошибка здесь показано
изменение поплавка = 0.00 f;

//печатается чек

Графика graphic = e.Graphics;

Font font = new Font("Century Gothic", 12); //необходимо использовать моно-разнесенный шрифт, так как пробелы должны выстраиваться в линию

float fontHeight = шрифт.GetHeight();

int startX = 10;
int startY = 10;
int offset = 40;

графический.Шнурок(" домашнего ", новый шрифт("века Готика", 18), Новый SolidBrush(цвет.Черный), startX, startY);
строка top = "имя элемента".PadRight(30) + "Цена";
graphic.DrawString(top, font, new SolidBrush(Color.Черный), startX, startY + offset);
offset = offset + (int)fontHeight; //сделайте интервал согласованным
графика.шнурок("----------------------------------", шрифт, новая сплошная кисть(цвет.Черный), startX, startY + offset);
offset = offset + (int)fontHeight + 5; //Сделайте интервал согласованным

float totalprice = 0.00 f;

foreach (строковый элемент в listBox1.Предметы)
{
//создайте строку для печати на reciept
характеристика намечаемой к выпуску строка = элемент;
строка productTotal = item.Substring(item.Длина - 6, 6);
float productPrice = float.Синтаксический анализ(поз.Подстрока(номенклатура.Длина - 5, 5));

//MessageBox.Показать(пункт.Подстрока(номенклатура.Длина - 5, 5) + "PROD TOTAL:" + productTotal);


totalprice += productPrice;

если (характеристика намечаемой к выпуску.Содержит(" -"))
{
строку ассортимент продукции = характеристика намечаемой к выпуску.Подстрока(0, 24);

graphic.DrawString(productLine, new Font("Century Gothic", 12, FontStyle.Курсив), new SolidBrush(Color.Red), startX, startY + offset);

offset = offset + (int)fontHeight + 5; //Сделайте интервал согласованным
}
еще
{
строку ассортимент продукции = характеристика намечаемой к выпуску;

graphic.DrawString(productLine, font, new SolidBrush(Color.Черный), startX, startY + offset);

offset = offset + (int)fontHeight + 5; //Сделайте интервал согласованным
}

}

изменение = (cash - totalprice);

//когда мы нарисовали все элементы, добавьте общую сумму

offset = offset + 20; //освободите немного места, чтобы общая сумма выделялась.

graphic.DrawString("Total to pay ".PadRight(30) + String.Формат("{0:c}", totalprice), новый шрифт("Century Gothic", 12, FontStyle.Жирный шрифт), новая сплошная кисть(цвет.Черный), startX, startY + offset);

offset = offset + 30; //освободите немного места, чтобы общая сумма выделялась.
graphic.DrawString("CASH ".PadRight(30) + String.Формат("{0:c}", cash), шрифт, новая сплошная кисть(Color.Черный), startX, startY + offset);
смещение = смещение + 15;
графика.шнурок("смена ".PadRight(30) + Строка.Формат("{0:c}", изменение), шрифт, новая сплошная кисть(цвет.Черный), startX, startY + offset);
offset = offset + 30; //освободите немного места, чтобы общая сумма выделялась.
graphic.DrawString(" Спасибо за ваш заказ", шрифт, новая сплошная кисть(цвет.Черный), startX, startY + offset);
смещение = смещение + 15;
graphic.DrawString(" пожалуйста, вернись скорее!", шрифт, новая сплошная кисть(цвет.Черный), startX, startY + offset);

}
}
}

1 Ответов

Рейтинг:
1

Richard MacCutchan

float cash = float.Parse(txtCash.Text.Substring(1,5)); //error shown here

Что, скорее всего, означает, что свойство Text не содержит по крайней мере 6 символов. Не думайте, что входные данные соответствуют ожиданиям вашего кода. Вы всегда должны анализировать входные данные, чтобы проверить их, прежде чем делать что-либо еще. Вы также должны использовать TryParse скорее, чем Parse, чтобы поймать любые недопустимые числа. И, наконец, не используйте float или double для финансовых значений; используйте целочисленные или десятичные типы для точности.