Создание Windows-приложений на основе Visual C#

         

Полный листинг приложения TextEditor


Листинг 6.13.

(html, txt)


}

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) { //Выбраны все страницы case PrintRange.AllPages: stringPrintText = rtbText.Text; StartPage = 1; NumPages = printDialog1.PrinterSettings.MaximumPage; break; //Выбрана выделенная область case PrintRange.Selection: stringPrintText = rtbText.SelectedText; StartPage = 1; NumPages = printDialog1.PrinterSettings.MaximumPage; break; //Выбран ряд страниц case PrintRange.SomePages: stringPrintText = rtbText.Text; StartPage = printDialog1.PrinterSettings.FromPage; NumPages = printDialog1.PrinterSettings.ToPage - StartPage+1; break; } PageNumber = 1; //Вызываем встроенный метод для начала печати printDocument1.Print(); }

} private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { //Создаем экземпляр graph класса Graphics Graphics graph = e.Graphics; //Создаем объект font, которому устанавливаем // шрифт элемента rtbText Font font = rtbText.Font; //Получаем значение межстрочного интервала — высоту шрифта Т1, 134 float HeightFont = font.GetHeight(graph); //Создаем экземпляр stringformat класса StringFormat для определения //дополнительных параметров форматирования текста. StringFormat stringformat = new StringFormat(); //Создаем экземляры rectanglefFull и rectanglefText класса RectangleF для //определния областей печати и текста. Т1, 104 RectangleF rectanglefFull, rectanglefText; //Создаем переменные для подсчета числа символов и строк. int NumberSymbols, NumberLines; //В качестве области печати устанавливаем объект rectanglefFull if (graph.VisibleClipBounds.X<0) rectanglefFull = e.MarginBounds; else //Определяем объект rectanglefFull rectanglefFull = new RectangleF( //Устанавливаем координату X e.MarginBounds.Left - (e.PageBounds.Width - graph.VisibleClipBounds.Width)/2, //Устанавливаем координату Y e.MarginBounds.Top - (e.PageBounds.Height - graph.VisibleClipBounds.Height)/2, //Устанавливаем ширину области e.MarginBounds.Width, //Устанавливаем высоту области e.MarginBounds.Height); rectanglefText = RectangleF.Inflate(rectanglefFull, 0, -2*HeightFont); //Определяем число строк int NumDisplayLines = (int)Math.Floor(rectanglefText.Height/HeightFont); //Устанавливаем высоту области rectanglefText.Height = NumDisplayLines*HeightFont;



if (rtbText.WordWrap) { stringformat.Trimming = StringTrimming.Word; } else { stringformat.Trimming = StringTrimming.EllipsisCharacter; stringformat.FormatFlags |=StringFormatFlags.NoWrap; } // При печати выбранных страниц переходим к первой стартовой странице while ((PageNumber<StartPage)&&(stringPrintText.Length>0)) { if(rtbText.WordWrap) //Измеряем текстовые переменные, //формирующие печать, и возвращаем число символов NumberSymbols //и число строк NumberLines graph.MeasureString(stringPrintText, font, rectanglefText.Size, stringformat, out NumberSymbols, out NumberLines); else NumberSymbols = SymbolsInLines(stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring(NumberSymbols); //Увеличиваем число страниц PageNumber++; } //Если длина строки stringPrintText равняется нулю (нет текста для печати), // останавливаем печать if (stringPrintText.Length==0) { e.Cancel = true; return; } //Выводим (рисуем) текст для печати — stringPrintText, используем для этого шрифт font, //кисть черного цвета — Brushes.Black, область печати — rectanglefText, //передаем строку дополнительного форматирования stringformat graph.DrawString(stringPrintText, font, Brushes.Black, rectanglefText, stringformat); //Получаем текст для следующей страницы if (rtbText.WordWrap) graph.MeasureString(stringPrintText, font, rectanglefText.Size, stringformat, out NumberSymbols, out NumberLines); else NumberSymbols = SymbolsInLines(stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring(NumberSymbols); //Очищаем объект stringformat, использованный для формирования полей. stringformat = new StringFormat(); //Добавляем вывод на каждую страницу ее номера stringformat.Alignment = StringAlignment.Far; graph.DrawString("Страница " + PageNumber, font, Brushes.Black, rectanglefFull, stringformat); PageNumber++; //Cнова проверяем, имеется ли текст для печати и номер страницы, заданной для печати e.HasMorePages=(stringPrintText.Length>0)&&(PageNumber<StartPage+NumPages); //Для печати из окна предварительного просмотра снова инициализируем переменные if(!e.HasMorePages) { stringPrintText = rtbText.Text; StartPage = 1; NumPages = printDialog1.PrinterSettings.MaximumPage; PageNumber = 1; }

}

int SymbolsInLines(string stringPrintText, int NumLines) { int index = 0; for (int i = 0; i< NumLines; i++) { index = 1+ stringPrintText.IndexOf('\n', index); if(index==0) return stringPrintText.Length; } return index; }

} }

Листинг 6.13.


Содержание раздела