Joey Arnanzo Ответов: 1

Печать элемента управления ListView на C#


Всем привет,

Я создал ресторан POS и у меня возникли проблемы с печатью listview

цель состоит в том, чтобы напечатать в квитанции следующее

Количество Продукта Цена Единицы Итого

Мне удалось с помощью кодирования распечатать его, но у меня есть еще одна проблема

используя следующий код

graphics.DrawString("  " + listView1.Items[0].SubItems[0].Text + "      " + listView1.Items[0].SubItems[1].Text + "      " + listView1.Items[2].SubItems[0].Text + "      " + listView1.Items[0].SubItems[3].Text,  new Font("Arial Bold", 11),
                     new SolidBrush(Color.Black), startX, startY + Offset);


проблема в том, что это печатает только одну строку listview

Я попытался добавить несколько строк предыдущего кода, чтобы иметь возможность печатать 6 строк

но это дает ошибку, когда любая из строк пуста

как заставить его печатать все элементы и подпункты в listview динамически в зависимости от количества строк, добавленных пользователем?

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

вот полный код печати

graphics.DrawString("  " + listView1.Items[0].SubItems[0].Text + "      " + listView1.Items[0].SubItems[1].Text + "      " + listView1.Items[2].SubItems[0].Text + "      " + listView1.Items[0].SubItems[3].Text,  new Font("Arial Bold", 11),
                     new SolidBrush(Color.Black), startX, startY + Offset);

[no name]

"проблема в том, что это печатает только одну строку listview", нет, это не проблема, это именно то, что вы сказали ему сделать.
"добавьте несколько строк предыдущего кода, чтобы иметь возможность печатать 6 строк", хорошо... действительно плохая идея, но ладно.
"но это дает ошибку, когда какая-либо из строк пуста", поэтому проверьте пустую строку.

Joey Arnanzo

Ладно, возможно, я действительно не указал, чего хочу

Пользователь нажимает кнопку, добавляет количество в текстовое поле, нажимает кнопку addtocart, и это переходит в listview

теперь количество напечатанных строк listview статично с количеством строк I write in code

Поэтому, если я помещаю 6 строк на 6 строк, пользователь должен добавить 6 элементов в listview, чтобы иметь возможность печатать

Я хочу, чтобы он печатал количество строк, которые вводит пользователь, в соответствии с тем, что он выбирает

есть ли во мне хоть какой-то смысл? не знаю, почему это чувство трудно объяснить

В любом случае спасибо за ваш ответ

[no name]

"Я действительно не указывал, чего хочу", да, я вижу, чего ты хочешь. Чего я не вижу, так это вопроса. Какой у вас вопрос? Почему вы не можете написать простой цикл for? Это основное Программирование 101.....

Joey Arnanzo

Ну, хорошо, что вы понимаете мой вопрос, и мне жаль, если я недостаточно хорош, чтобы понять основы программирования, но я не программист, я просто парень, пытающийся помочь другу, который не может позволить себе платить настоящему программисту, ваш тон очень снисходителен, но спасибо за вашу помощь, я думаю, что теперь я должен искать, как сделать цикл, я прав?

[no name]

Это кажется "снисходительным", потому что мы не являемся веб-сайтом" научи меня программированию". Да, вы должны посмотреть, как написать цикл. тогда сделай своему другу подарок. Возьмите книгу по основам программирования и попросите его пройти все упражнения. Тогда бы он все это знал.

Garth J Lancaster

"мы не являемся веб-сайтом" научи меня программированию"."

не так ли ? - Тогда я, должно быть, нахожусь не в том месте - да, мы являемся веб - сайтом "научи меня программированию" - иногда люди приходят к нам с большим, иногда с меньшим (пониманием)

Joey Arnanzo

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

for (int i = 0; i < listView1.Предметы.Граф; i++)
{
int ii = 1;
второй++;

графика.DrawString(" " + listView1.Элементы[я].Подпункты[0].Текст + мыши listview1.Элементы[я].Подпункты[1].Текст + мыши listview1.Элементы[я].Подпункты[2].Текст + мыши listview1.Элементы[я].Подпункты[3]. Текст, новый шрифт ("Arial Bold", 11),
новая твердая кисть(цвет.Черный), startX, startY + Offset);
}
Смещение = Смещение + 20;

Garth J Lancaster

хорошо, я не уверен, что это за графическая среда, но, скажем, "StartY" - это вертикальная ось, увеличивающаяся от верхней части страницы/квитанции к нижней - если бы это было так, то для каждой "итерации" цикла вы бы добавили высоту строки ? пиксели к стартовой переменной (или, может быть, "смещение", как у вас)

очевидно, что если ориентация StartY отличается, Вы можете в конечном итоге вычесть высоту линии из StartY ... Я не знаю, как вы получите высоту строки, хотя это зависит от вашего шрифта и от того, сколько полей вам нужно между строками и т. д. Учитывая, что у вас есть Arial/11, попробуйте 11 + 2 выше + 2 ниже = 15 для высоты строки ...

Garth J Lancaster

Я не видел 'Offset = Offset + 20;' в этом вчерашнем намеке - это должно быть внутри цикла

Joey Arnanzo

- Спасибо, Гарт. это сработало идеально

Garth J Lancaster

круто-я поставил это как "решение", хотя это, очевидно, всего лишь часть-надеюсь, вы не будете обескуражены - оставайтесь здесь, Читайте некоторые статьи, учитесь кодировать по ним, задавайте вопросы-вопреки мнению некоторых, именно поэтому мы здесь

Joey Arnanzo

Большое спасибо за Твою поддержку и поддержку, приятель.. Я действительно увлекаюсь программированием, мне нравится то, что вы, ребята, делаете, и я надеюсь, что скоро смогу им стать.
Кроме того, моя программа теперь завершена и работает, большое спасибо за вашу помощь

1 Ответов

Рейтинг:
9

Garth J Lancaster

Как мы уже выяснили в комментариях и т. д., Но для полноты картины вот код

for (int i = 0; i < listView1.Items.Count; i++)
{
  // Not sure what/why these two are here 
  int ii = 1;
  ii++;

  // Draw the row details for ? receipt 
  graphics.DrawString(" " + listView1.Items[i].SubItems[0].Text + listView1.Items[i].SubItems[1].Text +   
    listView1.Items[i].SubItems[2].Text + listView1.Items[i].SubItems[3].Text, new Font("Arial Bold", 11), 
    new SolidBrush(Color.Black), startX, startY + Offset);

  // Move the next print position 'down the page' ie, y axis increases from top to bottom
  Offset = Offset + 20;
}