Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Нужно напечатать саму форму (Form)


Автор: Omni 13.1.2008, 16:44
Приветствую! У меня форма, на ней из БД скл выводится в armoryDataGridView (список закрепленного оружия) информация по запросу. Хотел отправить на печать его содержимое, но запутался сильно (изучая http://www.gotdotnet.ru/LearnDotNet/WinForms/626.aspx). Теперь решил пока поступить проще: подскажите пожалуйста как отправить на печать всю форму, на которой размещен вывод скл запроса. Заранее спасибо.

Автор: mr.DUDA 14.1.2008, 10:09
Код
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace WindowsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Bitmap _image;

        private void button1_Click(object sender, EventArgs e)
        {
            _image = new Bitmap(Width, Height);
            using (Graphics gr = Graphics.FromImage(_image))
            {
                // скриншот формы
                gr.CopyFromScreen(Location, Point.Empty, Size);

                // показываем окно настройки печати
                PrintDocument printDoc = new PrintDocument();
                PrintDialog dlg = new PrintDialog();
                dlg.Document = printDoc;
                if (dlg.ShowDialog() != DialogResult.Cancel)
                {
                    // выводим на печать используя полученные настройки
                    printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
                    printDoc.Print();
                }
            }
        }

        void printDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            // выводим по центру страницы
            Rectangle rect = e.MarginBounds;
            rect.X += (e.MarginBounds.Width - _image.Width) / 2;
            rect.Y += (e.MarginBounds.Height - _image.Height) / 2;
            rect.Size = _image.Size;

            // рисуем картинку
            e.Graphics.DrawImage(_image, rect);
        }
    }
}

Автор: Nickey 14.1.2008, 10:10
Можно сделать скриншот формы,а затем распечатать этот скриншот. Вот такой полет мысли smile

Меня опередили =)

Автор: mr.DUDA 14.1.2008, 10:14
Цитата(Nickey @  14.1.2008,  09:10 Найти цитируемый пост)
Меня опередили =)

а я всё ждал не дождался пока кто-нибудь ответит...  smile 

Автор: Omni 15.1.2008, 14:39
to mr.DUDA - спасибо, сделал белым фон формы, нормально, но все не дает покоя вывод на печать. Читаю какие сутки и не могу понять где именно идет передача данных из таблицы на печать. Если Вам не сложно, не могли бы по примеру с формой, дать примерный код (очень помогли комментарии) простой передачи на печать данных из DataTable1 (скл запрос: звание,фио, закрепленное оружие, командировка, родственники). Пробывал через отчеты, но выводится только по одному данному и не смог приделать навигацию. 
Убедительная просьба помочь с кодом, хочу по деталям во всем разобраться где я застрял (по примеру ссылки, приведенной в первом посте).
Заранее спасибо.

Автор: farad 15.1.2008, 15:47
Цитата(Omni @  15.1.2008,  14:39 Найти цитируемый пост)
 простой передачи на печать данных из DataTable1
Не знаю как насчет простоты задачи в целом, но думаю, что в качестве «печки» от которой плясать данный пример сойдет:
Код

        DataTable printingTable = null;//разумеется ее надо создать и заполнить данными
        int currentRow = 0;//строка в таблице с которой начинается печать на странице

        private void button1_Click(object sender, EventArgs e)
        {
            printDocument1.Print();
        }

        private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            currentRow = 0;
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            string resLine = "";
            float CurrentY = 0;//печатаем с самого верха
            using(Font fnt=new Font("Arial",12))
            {
                int r =currentRow;
                for (; r < printingTable.Rows.Count; r++)
                {
                    resLine = "";
                    for (int col = 0; col < printingTable.Columns.Count; col++)
                        resLine += printingTable.Rows[r][col].ToString() + " ";
                    e.Graphics.DrawString(resLine, fnt, Brushes.Black, 0, CurrentY);
                    CurrentY += e.Graphics.MeasureString(resLine, fnt).Height;
                    if (CurrentY > e.PageSettings.PrintableArea.Height) break;
                }
                currentRow = r;
            }
//даем понять -печатаем еще или уже закончили
            e.HasMorePages = 
                (currentRow<(printingTable.Rows.Count-1));
        }




Автор: mr.DUDA 16.1.2008, 10:23
Omni, был задан вопрос как распечатать форму, а не DataTable. Ответ был дан на заданный вопрос. Скриншот формы и строки таблицы а-ля отчёт на 10 страницах - это же совсем разные вещи!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)