Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно напечатать саму форму (Form), Как послать на печать форму 
:(
    Опции темы
Omni
Дата 13.1.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.12.2005
Где: Краснодар

Репутация: нет
Всего: нет



Приветствую! У меня форма, на ней из БД скл выводится в armoryDataGridView (список закрепленного оружия) информация по запросу. Хотел отправить на печать его содержимое, но запутался сильно (изучая http://www.gotdotnet.ru/LearnDotNet/WinForms/626.aspx). Теперь решил пока поступить проще: подскажите пожалуйста как отправить на печать всю форму, на которой размещен вывод скл запроса. Заранее спасибо.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 14.1.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Код
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);
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
Nickey
Дата 14.1.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 21.7.2006

Репутация: нет
Всего: нет



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

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

Это сообщение отредактировал(а) Nickey - 14.1.2008, 10:10
PM MAIL   Вверх
mr.DUDA
Дата 14.1.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



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

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


--------------------
user posted image
PM MAIL WWW   Вверх
Omni
Дата 15.1.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.12.2005
Где: Краснодар

Репутация: нет
Всего: нет



to mr.DUDA - спасибо, сделал белым фон формы, нормально, но все не дает покоя вывод на печать. Читаю какие сутки и не могу понять где именно идет передача данных из таблицы на печать. Если Вам не сложно, не могли бы по примеру с формой, дать примерный код (очень помогли комментарии) простой передачи на печать данных из DataTable1 (скл запрос: звание,фио, закрепленное оружие, командировка, родственники). Пробывал через отчеты, но выводится только по одному данному и не смог приделать навигацию. 
Убедительная просьба помочь с кодом, хочу по деталям во всем разобраться где я застрял (по примеру ссылки, приведенной в первом посте).
Заранее спасибо.
PM MAIL ICQ   Вверх
farad
Дата 15.1.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 1
Всего: 6



Цитата(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));
        }




PM MAIL   Вверх
mr.DUDA
Дата 16.1.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



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


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.