RUS_-_Karejev_-_Razrabotka_Windows-prilozhenij
.pdf
}
}
При вызове диалогового окна на панели сразу будет появляться эскиз линии по умолчанию, для этого создаем обработчик события Paint формы, в котором вызываем метод DrawLine:
private void LineWidth_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
DrawLine();
}
Связываем перемещение ползунка элемента trackBar1 со значением в поле элемента numericUpDown1, для чего в обработчике события Scroll вводим переменную val, связывающую свойства Value этих элементов:
private void trackBar1_Scroll(object sender, System.EventArgs e)
{
int val = trackBar1.Value; numericUpDown1.Value = val;
}
Аналогично, для связывания значения в поле элемента numericUpDown1 с перемещением ползунка в обработчике события ValueChanged вводим переменную val2:
private void numericUpDown1_ValueChanged(object sender, System.EventArgs e)
{
int val2 = (int)numericUpDown1.Value; trackBar1.Value = val2;
DrawLine();
}
В этом обработчике мы также вызываем метод DrawLine для вывода эскиза линии на форме. Последнее, что нам осталось сделать,
— добавить обработчик в пункте меню "Толщина линии" главной формы:
private void mnuWidth_Click(object sender, System.EventArgs e)
{
LineWidth diag = new LineWidth();
if (diag.ShowDialog(this)== DialogResult.OK)
{
mainPen = new Pen(mainPen.Color, diag.PenWidth);
}
}
Запускаем приложение. Теперь можно рисовать не только разными цветами, но и разной толщиной пера (рис. 6.19).
Рис. 6.19. Приложение EasyPaint и его диалоговое окно "Толщина линии"
На диске, прилагаемом к книге, вы найдете приложение EasyPaint (Code\Glava6\ EasyPaint).
Автоматическоепреобразование размера и прокручивание изображения
При создании приложения Picture Viewer нашей задачей была печать содержимого PictureBox, и мы не слишком обращали внимание на внешний вид изображения, помещаемого в него. Между тем, единственным способом просмотра изображения полностью был выбор режима "Подогнать размер" (StretchImage), который приводил к довольно существенным искажениям (рис. 6.20).
увеличить изображение
Рис. 6.20. Помещение рисунка в PictureBox без сохранения его пропорций (наверху, приложение Picture Viewer) и с сохранением
(внизу)</p>
Кроме того, при выборе режима "Истинный размер" (Normal) на форме не появлялись полосы прокрутки, позволяющие просматривать изображение по частям (рис. 6.21).
Рис. 6.21. При выходе изображения за границы формы необходимы полосы прокрутки
Конечно, вписанное изображение можно было просматривать, изменяя размер самой формы, но этот способ вряд ли будет устраивать пользователей. Займемся разработкой приложения, обладающего более удобным интерфейсом. Далее я снова местами буду пользоваться транслитом и называть режим Scroll Prokrutkoy: дело в том, что мы научимся создавать собственные свойства
пользовательского элемента управления, и мне хочется, чтобы они бросались в глаза. Запускаем Visual Studio .NET, создаем новый проект, выбираем шаблон Windows Control Library и называем его PictureElement (рис. 6.22):
Рис. 6.22. Создание проекта пользовательского элемента управления
В окне Properties появившейся формы в поле свойства Name вводим NamePictureElement. В окне Solution Explorer изменяем
название UserControl1.cs на SolPictureElement.cs. Добавляем на форму элемент управления PictureBox — его размеры будут достаточно маленькими, но это не важно, в дальнейшем мы изменим его размер так, как будет нужно (рис. 6.23).
Рис. 6.23. Элемент управления PictureElement в режиме дизайна
Свойству SizeMode элемента управления PictureBox устанавливаем значение StretchImage. Переходим в код формы, в пространстве имен PictureElement создаем перечисление RejimProsmotra:
public enum RejimProsmotra
{
Prokrutka, PodgonRazmera
}
В классе формы создаем переменную prosmotrperemen, которая будет определять режим просмотра:
private RejimProsmotra prosmotrperemen;
Создаем свойство Izobrajenie, с помощью которого можно будет помещать изображение в PictureBox элемента:
public Image Izobrajenie
{
get{return this.pictureBox1.Image;} set
{
this.pictureBox1.Image = value; //Вызываем метод для установки режима просмотра
this.UstanovkaRejima();
}
}
Создаем свойство UserPropRejimProsmotra, в котором переменной prosmotrperemen устанавливается значение выбранного режима просмотра:
public RejimProsmotra UserPropRejimProsmotra
{
get{return this.prosmotrperemen;} set
{
this.prosmotrperemen = value;
this.AutoScroll = (this.prosmotrperemen == RejimProsmotra.Prokrutka ); //Вызываем метод для установки режима просмотра this.UstanovkaRejima();
}
}
В методе PodgonRazmera определяются различные возможные случаи отношений размеров изображения, PictureBox и самого элемента:
private void PodgonRazmera()
{
//Определяем переменную ProporciiElementa, которая равна //отношению ширины элемента к его высоте
float ProporciiElementa = (float)this.Width/this.Height; //Определяем переменную ProporciiIzobrajeniya, которая равна //отношению ширины загруженного изображения к его высоте
float ProporciiIzobrajeniya = (float)this.pictureBox1.Image.Width/this.pictureBox1.Image.Height; //Если ширина элемента больше или равна ширине изображения //и высота больше или равна высоте изображения, устанавливаем значения ширины
//и высоты pictureBox1 равными ширине и высоте изображения
if ( this.Width >= this.pictureBox1.Image.Width && this.Height >= this.pictureBox1.Image.Height )
{
this.pictureBox1.Width = this.pictureBox1.Image.Width; this.pictureBox1.Height = this.pictureBox1.Image.Height;
}
//Иначе, если ширина элемента больше ширины изображения //и высота меньше высоты изображения, устанавливаем значение высоты
// pictureBox1, равное высоте элемента, а значение ширины — равное значению //ширины изображения
else if( this.Width > this.pictureBox1.Image.Width && this.Height < this.pictureBox1.Image.Height)
{
this.pictureBox1.Height = this.Height;
this.pictureBox1.Width = (int)(this.Height * ProporciiIzobrajeniya);
} |
меньше ширины изображения |
//Иначе, если ширина элемента |
|
//и высота больше высоты изображения, устанавливаем значение ширины |
|
// pictureBox1, равное ширине |
элемента, а значение высоты — равное значению |
//высоты изображения
else if( this.Width < this.pictureBox1.Image.Width && this.Height > this.pictureBox1.Image.Height)
{
this.pictureBox1.Width = this.Width;
this.pictureBox1.Height = (int)(this.Width / ProporciiIzobrajeniya);
}
//Иначе, если ширина элемента меньше ширины изображения //и высота меньше высоты изображения
else if ( this.Width < this.pictureBox1.Image.Width && this.Height < this.pictureBox1.Image.Height )
{
//если ширина элемента больше или равна его высоте if (this.Width >= this.Height )
{
//Если ширина изображения больше или равна его высоте и переменная
//ProporciiIzobrajeniya больше или равна переменной ProporciiElementa, //устанавливаем значение ширины pictureBox1, равное значению ширины элемента, //а значение высоты — равное значению высоты изображения
if ( this.pictureBox1.Image.Width >= this.pictureBox1.Image.Height && ProporciiIzobrajeniya >= ProporciiElementa )
{
this.pictureBox1.Width = this.Width;
this.pictureBox1.Height = (int)(this.Width / ProporciiIzobrajeniya);
}
//Иначе, устанавливаем значение высоты pictureBox1, равное значению //высоты элемента, а значение ширины — равное значению ширины изображения
else
{
this.pictureBox1.Height = this.Height; this.pictureBox1.Width = (int)(this.Height * ProporciiIzobrajeniya);
}
}
//Иначе else
{
//Если ширина изображения меньше его высоты и переменная
//ProporciiIzobrajeniya меньше переменной ProporciiElementa,
//устанавливаем значение высоты pictureBox1, равное значению высоты элемента, //а значение ширины — равное значению ширины изображения
if ( this.pictureBox1.Image.Width < this.pictureBox1.Image.Height && ProporciiIzobrajeniya < ProporciiElementa )
{
this.pictureBox1.Height = this.Height; this.pictureBox1.Width = (int)(this.Height * ProporciiIzobrajeniya);
}
//Иначе, устанавливаем значение ширины pictureBox1, равное значению //ширины элемента, а значение высоты — равное значению высоты изображения
else
{
this.pictureBox1.Width = this.Width;
this.pictureBox1.Height = (int)(this.Width / ProporciiIzobrajeniya);
}
}
}
//Вызываем метод для размещения изображения в центре
PomeshenieIzobrajeniyavCenter();
}
Листинг 6.12.
В методе Prokrutka размеры PictureBox устанавливаются равными размерам загруженного изображения:
private void Prokrutka()
{
//Устанавливаем значение ширины pictureBox1, равное значению ширины изображения this.pictureBox1.Width = this.pictureBox1.Image.Width;
//Устанавливаем значение высоты pictureBox1, равное значению высоты изображения this.pictureBox1.Height = this.pictureBox1.Image.Height;
//Вызываем метод для установки режима просмотра this.PomeshenieIzobrajeniyavCenter();
}
В методе UstanovkaRejima проверяется значение переменной prosmotrperemen и вызывается соответствующий метод:
private void UstanovkaRejima()
{
//если pictureBox1 не содержит изображения, возвращаемся назад if ( this.pictureBox1.Image == null )
return;
//Если значение переменной prosmotrperemen равно PodgonRazmera, //вызываем метод PodgonRazmera
if ( this.prosmotrperemen == RejimProsmotra.PodgonRazmera ) this.PodgonRazmera();
//Иначе вызываем метод Prokrutka else
{
this.Prokrutka(); this.AutoScroll = true;
}
}
В методе PomeshenieIzobrajeniyavCenter определяется положение элемента pictureBox1 и, соответственно, положение изображения:
private void PomeshenieIzobrajeniyavCenter()
{
//Переменная top равна разнице между высотой элемента //и высотой pictureBox1, деленной пополам
int top = (int)((this.Height - this.pictureBox1.Height)/2.0); //Переменная left равна разнице между шириной элемента
//и шириной pictureBox1, деленной пополам
int left = (int)((this.Width - this.pictureBox1.Width)/2.0); if ( top < 0 )
top = 0;
if ( left > 0 ) left = 0;
this.pictureBox1.Top = top; this.pictureBox1.Left = left;
}
Переключаемся в режим дизайна, выделяем форму, в окне Properties переключаемся на события и дважды щелкаем в поле Resize
и Load:
private void NamePictureElement_Resize(object sender, System.EventArgs e)
{
//При изменении размеров элемента вызывается метод для установки режима просмотра: this.UstanovkaRejima();
}
private void NamePictureElement_Load(object sender, System.EventArgs e)
{
//при загрузке элемента устанавливаем нулевые ширину и высоту pictureBox1 this.pictureBox1.Width = 0;
this.pictureBox1.Height = 0;
//Вызываем метод для установки режима просмотра this.UstanovkaRejima();
}
Все! Компилируем проект, используя сочетания клавиш Ctrl+Shift+B, и закрываем его. Создаем новое Windows-приложение, которое называем AutoScroll_and_Constrain. В свойстве Text формы можно ввести надпись "Сохранение пропорций и прокрутка".
Перетаскиваем на форму OpenFileDialog, а главное меню скопируем из приложения Picture Viewer, затем оставим следующие пункты:
mainMenu1, Name |
Text |
Shortcut |
mnuFile |
&Файл |
|
mnuOpen |
&Открыть |
CtrlO |
mnuView |
&Вид |
|
mnuResize |
&Подогнать размер |
|
mnuActual |
&Истинный размер |
|
Теперь нам нужно добавить созданный пользовательский элемент управления. В окне Toolbox щелкаем правой кнопкой на закладке Windows Forms и выбираем пункт Add/Remove Items… . В окне Customize Toolbox на вкладке .NET Framework Components
нажимаем кнопку Browse и выбираем файл PictureElement.dll из папки bin/Debug проекта PictureElement. В результате в окне компонент появляется элемент NamePictureElement, принадлежащий пространству имен PictureElement (рис. 6.24).
Рис. 6.24. Элемент NamePictureElement
Закрываем окно Customize Toolbox и перетаскиваем на форму появившейся элемент управления NamePictureElement. Обратите внимание на название этого элемента — не случайно при работе с проектом PictureElement мы дали проекту, форме и объекту в
Solution Explorer три разных названия. На вкладке Toolbox элемент управления будет называться так же, как и форма пользовательского элемента в режиме дизайна (рис. 6.25).
Рис. 6.25. Свойство Name формы будет названием пользовательского элемента управления
В окне Properties элемента namePictureElement1 появились два новых свойства, которые мы создали сами (рис. 6.26)!
Рис. 6.26. Слева приведены фрагменты кода пользовательского элемента управления, на основании которых и были созданы свойства в окне Properties
Устанавливаем свойству Dock значение Fill, а свойству UserPropRejimProsmotra — значение PodgonRazmera. В обработчике пункта меню "Открыть" свойству Izobrajenie элемента загружаемое изображение:
private void mnuOpen_Click(object sender, System.EventArgs e)
{
this.openFileDialog1.ShowDialog();
string path = this.openFileDialog1.FileName; this.namePictureElement1.Izobrajenie = Image.FromFile(path);
}
В обработчиках пунктов меню изменения режима просмотра последовательно устанавливаем два значения свойства
UserPropRejimProsmotra:
private void mnuResize_Click(object sender, System.EventArgs e)
{
this.namePictureElement1.UserPropRejimProsmotra = PictureElement.RejimProsmotra.PodgonRazmera;
}
private void mnuActual_Click(object sender, System.EventArgs e)
{
this.namePictureElement1.UserPropRejimProsmotra = PictureElement.RejimProsmotra.Prokrutka;
}
Строка кода в обработчике mnuResize_Click скопирована из области Windows Form Designer generated code:
//
// namePictureElement1
//
this.namePictureElement1.Dock = System.Windows.Forms.DockStyle.Fill; this.namePictureElement1.Izobrajenie = null;
…
this.namePictureElement1.UserPropRejimProsmotra = PictureElement.RejimProsmotra.PodgonRazmera;
Запускаем приложение. Два режима просмотра позволяют просматривать уменьшенное изображение с сохранением пропорций или его действительную часть с прокруткой (рис. 6.27).
Рис. 6.27. Готовое приложение AutoScroll_and_Constrain
На диске, прилагаемом к книге, вы найдете приложения PictureElement и AutoScroll_and_Constrain (Code\Glava6\PictureElement
и AutoScroll_and_Constrain ).
Полный листинг приложения TextEditor
using System;
using System.Drawing; using System.Collections;
using System.ComponentModel; using System.Windows.Forms; using System.Data;
using System.IO;
using System.Drawing.Printing;
namespace TextEditor
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.OpenFileDialog openFileDialog1; private System.Windows.Forms.SaveFileDialog saveFileDialog1; private System.Windows.Forms.RichTextBox rtbText;
private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem mnuFile; private System.Windows.Forms.MenuItem mnuOpen; private System.Windows.Forms.MenuItem mnuSave; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem mnuPageSetup; private System.Windows.Forms.MenuItem mnuPrintPreview; private System.Windows.Forms.MenuItem mnuPrint;
private System.Windows.Forms.PageSetupDialog pageSetupDialog1; private System.Drawing.Printing.PrintDocument printDocument1;
private System.Windows.Forms.PrintDialog printDialog1;
private System.Windows.Forms.PrintPreviewDialog printPreviewDialog1; //Переменная для хранения текста для печати.
//В нее мы будем помещать текст из RichTextBox string stringPrintText;
//Переменная, определяющая номер страницы, с которой нужно начать печать int StartPage;
//Переменная, определяющая количество страниц для печати: int NumPages;
//Переменная, определяющая номер текущей страницы: int PageNumber;
//PrintDocument printDocument1 = new PrintDocument();
//PageSetupDialog pageSetupDialog1 = new PageSetupDialog();
//PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
//PrintDialog printDialog1 = new PrintDialog();
///<summary>
///Required designer variable.
///</summary>
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
//pageSetupDialog1.Document = printDocument1;
//printPreviewDialog1.Document = printDocument1;
//printDialog1.Document = printDocument1;
//printDialog1.AllowSomePages = true;
//printDialog1.AllowSelection = true;
//
//Определяем номер страницы, с которой следует начать печать printDialog1.PrinterSettings.FromPage = 1;
//Определяем максимальный номер печатаемой страницы. printDialog1.PrinterSettings.ToPage = printDialog1.PrinterSettings.MaximumPage;
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///<summary>
///Required method for Designer support — do not modify
///the contents of this method with the code editor.
///</summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.rtbText = new System.Windows.Forms.RichTextBox(); this.mainMenu1 = new System.Windows.Forms.MainMenu(); this.mnuFile = new System.Windows.Forms.MenuItem();
this.mnuOpen = new System.Windows.Forms.MenuItem(); this.mnuSave = new System.Windows.Forms.MenuItem(); this.menuItem1 = new System.Windows.Forms.MenuItem(); this.mnuPageSetup = new System.Windows.Forms.MenuItem(); this.mnuPrintPreview = new System.Windows.Forms.MenuItem(); this.mnuPrint = new System.Windows.Forms.MenuItem();
this.pageSetupDialog1 = new System.Windows.Forms.PageSetupDialog(); this.printDocument1 = new System.Drawing.Printing.PrintDocument(); this.printDialog1 = new System.Windows.Forms.PrintDialog(); this.printPreviewDialog1 = new System.Windows.Forms.PrintPreviewDialog(); this.SuspendLayout();
//
//openFileDialog1
this.openFileDialog1.FileName = "Текстовые файлы";
this.openFileDialog1.Filter = "Text Files (*.txt)|*.txt|All Files(*.*)|*.* ";
//saveFileDialog1
//
this.saveFileDialog1.FileName = "Текстовые файлы";
this.saveFileDialog1.Filter = "Text Files (*.txt)|*.txt|All Files(*.*)|*.* ";
//
// rtbText
//
this.rtbText.Dock = System.Windows.Forms.DockStyle.Fill; this.rtbText.Location = new System.Drawing.Point(0, 0); this.rtbText.Name = "rtbText";
this.rtbText.Size = new System.Drawing.Size(292, 266); this.rtbText.TabIndex = 1;
this.rtbText.Text = "";
//
// mainMenu1
//
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuFile});
//
// mnuFile
//
this.mnuFile.Index = 0;
this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuOpen, this.mnuSave, this.menuItem1, this.mnuPageSetup, this.mnuPrintPreview, this.mnuPrint});
this.mnuFile.Text = "&Файл";
//
//mnuOpen
this.mnuOpen.Index = 0;
this.mnuOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO; this.mnuOpen.Text = "&Открыть";
this.mnuOpen.Click += new System.EventHandler(this.mnuOpen_Click);
//mnuSave
//
this.mnuSave.Index = 1;
this.mnuSave.Shortcut = System.Windows.Forms.Shortcut.CtrlS; this.mnuSave.Text = "&Сохранить";
//
//menuItem1
this.menuItem1.Index = 2; this.menuItem1.Text = "-";
//mnuPageSetup
//
this.mnuPageSetup.Index = 3; this.mnuPageSetup.Text = "Пара&метры страницы";
this.mnuPageSetup.Click += new System.EventHandler(this.mnuPageSetup_Click);
//
//mnuPrintPreview
this.mnuPrintPreview.Index = 4; this.mnuPrintPreview.Text = "Пред&варительный просмотр";
this.mnuPrintPreview.Click += new System.EventHandler(this.mnuPrintPreview_Click);
//mnuPrint
//
this.mnuPrint.Index = 5;
this.mnuPrint.Shortcut = System.Windows.Forms.Shortcut.CtrlP; this.mnuPrint.Text = "&Печать";
this.mnuPrint.Click += new System.EventHandler(this.mnuPrint_Click);
//
//pageSetupDialog1
this.pageSetupDialog1.Document = this.printDocument1;
//printDocument1
//
this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_ PrintPage);
//
//printDialog1
this.printDialog1.AllowSelection = true; this.printDialog1.AllowSomePages = true;
this.printDialog1.Document = this.printDocument1;
//printPreviewDialog1
//
this.printPreviewDialog1.AutoScrollMargin = new System.Drawing.Size(0, 0); this.printPreviewDialog1.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.printPreviewDialog1.ClientSize = new System.Drawing.Size(400, 300); this.printPreviewDialog1.Document = this.printDocument1; this.printPreviewDialog1.Enabled = true;
this.printPreviewDialog1.Icon = ((System.Drawing.Icon)(resources.GetObject("printPreviewDialog1.Icon"))); this.printPreviewDialog1.Location = new System.Drawing.Point(17, 54); this.printPreviewDialog1.MinimumSize = new System.Drawing.Size(375, 250);
this.printPreviewDialog1.Name = "printPreviewDialog1"; this.printPreviewDialog1.TransparencyKey = System.Drawing.Color.Empty; this.printPreviewDialog1.Visible = false;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.rtbText);
this.Menu = this.mainMenu1; this.Name = "Form1"; this.Text = "TextEditor"; this.ResumeLayout(false);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void mnuOpen_Click(object sender, System.EventArgs e)
{
//Показываем диалог выбора файла openFileDialog1.ShowDialog() ;
// Переменной fileName присваиваем имя открываемого файла string fileName = openFileDialog1.FileName;
//Создаем поток fs и открываем файл для чтения.
FileStream filestream= File.Open(fileName, FileMode.Open, FileAccess.Read); //Проверяем, открыт ли поток, и если открыт, выполняем условие if(filestream != null)
{
//Создаем объект streamreader и связываем его с потоком filestream
StreamReader streamreader = new StreamReader(filestream /*System.Text.Encoding.Unicode*/); //Считываем весь файл и записываем его в TextBox
rtbText.Text = streamreader.ReadToEnd(); //Закрываем поток.
filestream.Close();
}
}
private void mnuSave_Click(object sender, System.EventArgs e)
{
//Показываем диалог выбора файла saveFileDialog1.ShowDialog();
// В качестве имени сохраняемого файла устанавливаем переменную fileName string fileName=saveFileDialog1.FileName;
//Создаем поток fs и открываем файл для записи.
FileStream filestream = File.Open(fileName, FileMode.Create, FileAccess.Write); //Проверяем, открыт ли поток, и если открыт, выполняем условие
if(filestream != null)
{
//Создаем объект streamwriter и связываем его с потоком filestream StreamWriter streamwriter = new StreamWriter(filestream); //Записываем данные из TextBox в файл streamwriter.Write(rtbText.Text);
//Переносим данные из потока в файл streamwriter.Flush();
//Закрываем поток filestream.Close();
}
}
private void mnuPageSetup_Click(object sender, System.EventArgs e)
{
//Показываем диалог pageSetupDialog1.ShowDialog();
}
private void mnuPrintPreview_Click(object sender, System.EventArgs e)
{
//Инициализируем переменные printDocument1.DocumentName = Text; stringPrintText = rtbText.Text; StartPage = 1;
NumPages = printDialog1.PrinterSettings.MaximumPage; PageNumber = 1;
//Показываем диалог printPreviewDialog1.ShowDialog();
}
private void mnuPrint_Click(object sender, System.EventArgs e)
{
printDialog1.AllowSelection = rtbText.SelectionLength >0;
if(printDialog1.ShowDialog()==DialogResult.OK)
{
printDocument1.DocumentName =Text; //Определяем диапазон страниц для печати
switch(printDialog1.PrinterSettings.PrintRange)
{
