Лабораторно упражнение № 1
Управление на диалогови форми.
Лабораторно упражнение № 1
УПРАВЛЕНИЕ НА ДИАЛОГОВИ ФОРМИ.
1. Въведение.
Visual Basic.Net предлага множество от диалогови форми с помощта, на които могат да бъдат програмирани и изпълнени рутинни действия. По важните от тях са:
OpenFileDialog – за отваряне на диалогова форма, визуализираща посочената директория и съответно нейните поддиректории и файлове. Визуализацията се ограничава от филтър.
SaveFileDialog – аналогично на предната, но с функции за определяне на директорията и наименованието на записвания файл.
FontDialog – диалогова форма, позволяваща избор на шрифт и определяне на неговите параметри.
ColorDialog – диалогова форма, позволяваща манипулации с цветовата палитра.
PageSetupDialog – диалогова форма за настройка на принтираната страница.
PrintPreviewDialog - за визуализация на принтирана страница и др.
2. Цел на упражнението.
Упражнението има обобщаващ характер. В заданието за разработка на лабораторното упражнение са включени програмни решения за организиране на потребителски интерфейс с помощта на диалогови форми. Студентите ще могат практически да разработят програмни конструкции за управление на най-често използваните диалогови форми.
3. Задание на лабораторно упражнение.
Да се разработи експериментална програма за управление на диалогови форми. За целта:
-
Стартирайте ново приложение с форма Form1 оформена по начин показан на Фиг.1.1.
Фиг.1.1.
Форма “Управление на диалогови форми”
-
Създайте главно меню с позиции: OpenFileDialog, SaveFileDialog, FontDialog, ColorDialog, Print с падащо подменю PageSetupDialog, InstalledPrinters, PrintPreviewControl , PrintPreviewDialog, PrintDialog и др.
-
Поставете надпис “Избран път и файл”, Label за визуализация на избрания път и файл и ComboBox за визуализация на списъка на инсталираните в конфигурацията принтери.
-
Поставете StatusStrip, съдържащ три панела. Първият визуализира избрания файл, вторият за името на файла при копиране и третия показва текущото време. При зареждане на формата включете програмния текст, изчисляващ ширината на панелите в зависимост от формата:
ToolStripStatusLabel1.Width = Me.Width / 2
ToolStripStatusLabel2.Width = Me.Width / 4
ToolStripStatusLabel3 .Width = Me.Width / 4
-
При промяна ширината на формата пропорционално да се изменят ширините на панелите.
-
Поставете Timer и го свържете с третия StatusBarPanel3 като съответно форматирате представянето на текущото време.
-
В процедурата на главното меню валидна за OpenFileDialog поставете следния текст:
OpenFileDialog1.InitialDirectory = "c:\"
OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
OpenFileDialog1.FilterIndex = 2
OpenFileDialog1.RestoreDirectory = True
OpenFileDialog1.Title = "OpenFileDialog"
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
Label1.Text = OpenFileDialog1.FileName
ToolStripStatusLabel1 .Text = "Избран е файл с път и име: " +
Label1.Text
Else
ToolStripStatusLabel1 .Text = "Не е избран файл."
Label1.Text = ""
End If
Обърнете внимание на начина, по който се проектира филтъра на диалоговата форма. FilterIndex показва, коя от позициите в списъка е валидна при отваряне на формата. Ако бъде върнат резултата DialogResult.OK , то името на файла FileName се записва в първия панел и в Label1.
-
Програмната част, изпълняваща функциите свързани с позиция SaveFileDialog от главното меню, е следната:
SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
SaveFileDialog1.FilterIndex = 2
SaveFileDialog1.RestoreDirectory = True
SaveFileDialog1.Title = "SaveFileDialog”
SaveFileDialog1.FileName = Label1.Text
If SaveFileDialog1.ShowDialog () = DialogResult.OK Then
If Trim (Label1.Text) <> "" Then
FileCopy (Trim (Label1.Text), SaveFileDialog1.FileName)
ToolStripStatusLabel2 .Text .Text = "Копие: " +
SaveFileDialog1.FileName
Else
ToolStripStatusLabel2 .Text .Text = "Не е избран файл за копиране. "
StatusBarPanel2.Text = ""
End If
End If
Т.к. няма създаден нов файл в програмата се копира избрания в предната позиция файл. Съществува възможност името на файла да се промени (създава се копие) или да се запише със същото име. Новото име се визуализира във втория панел.
-
Третата позиция от главното меню активира следния програмен код:
FontDialog1.ShowColor = True
If FontDialog1.ShowDialog() <> DialogResult.Cancel Then
Label1.Font = FontDialog1.Font
Label1.ForeColor = FontDialog1.Color
End If
Примерът демонстрира промяна на шрифта на текста записан в Label1. Допълнителна възможност предоставена от диалоговата форма е избор и промяна цвета на текста. За целта посредством OpenFileDialog трябва да бъде избрано име на файл.
-
От позиция се избира и съответно сменя само цвета на текста в Label1.
ColorDialog1.Color = Label1.ForeColor
ColorDialog1.ShowDialog()
Label1.ForeColor = ColorDialog1.Color
Характерно за примера е, че първоначално се запомня цвета на текста, който се съхранява при положение, ако не се избере цвят.
-
В една компютърна конфигурация могат да бъдат инсталирани повече от един принтери. Следният програмен текст създава списък на “намерените” принтери в ComboBox1 с наименование CInstalledPrinters:
Dim pkInstalledPrinters As String
CInstalledPrinters.Items.Clear()
For Each pkInstalledPrinters In PrinterSettings.InstalledPrinters
CInstalledPrinters.Items.Add(pkInstalledPrinters)
Next
If CInstalledPrinters.Items.Count > 0 Then
CInstalledPrinters.Text = CInstalledPrinters.Items.Item(1)
End If
В този пример не се визуализира специализирана диалогова форма. Резултатът се получава в обект, представляващ списък за избор.
-
Позиция от главното меню отваря диалогова форма за настройка на печатната страница (Фиг.1.2.).
Фиг. 1.2.
Програмния текст е следния:
Try
If (storedPageSettings Is Nothing) Then
storedPageSettings = New PageSettings()
End If
PageSetupDialog1.PageSettings = storedPageSettings
PageSetupDialog1.ShowDialog()
Catch ex As Exception
MessageBox.Show("Грешка: " + ex.Message)
End Try
-
Преди отпечатването на зададен текстов файл е препоръчително да се визуализира неговото съдържание. Възможни са два начина:
-
посредством PrintPreviewControl и
-
с помощта на PrintPreviewDialog
Всеки от посочените начини има своите предимства и недостатъци.
-
Върху проектираната форма поставете контрола PrintPreviewControl1. Препоръчително е да бъде разположен максимално в ляво и съответно горе, без да закрива останалите обекти.
-
Поставете допълнително следните обекти показани на фиг. 1.3.
Фиг.1.3.
където с бутона btnPrev “Покажи !” се визуализира съдържанието на избрания текстов файл, намиращ се в Label1. Визуализацията е в зависимост от избрания мащаб.
-
При стартиране на формата PrintPreviewControl1 трябва да заеме максимално възможна площ на екрана. За целта в процедурата Load поставете следния текст:
Me.Left = 0
Me.Top = 0
Me.Width = Screen.PrimaryScreen.Bounds.Width - 10
Me.Height = Screen.PrimaryScreen.Bounds.Height - 50
PrintPreviewControl1.Width = Me.Width - PrintPreviewControl1.Left
PrintPreviewControl1.Height = Me.Height - PrintPreviewControl1.Top
-
В събитийната процедура на позицията от падащото меню PrintPreviewDialog запишете следното:
Dim pd As PrintDocument = New PrintDocument()
Dim Lb As String
Try
Lb = Label1.Text
If UCase(Lb.Substring(Lb.Length - 4)) <> ".TXT" Then Exit Sub
streamToPrint = New StreamReader(Me.Label1.Text)
printFont = New Font("Arial", 10)
AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
Me.PrintPreviewControl1.Document = pd
If ComboBox1.Text.Trim <> "" Then
PrintPreviewControl1.AutoZoom = False
PrintPreviewControl1.Zoom = Val(ComboBox1.Text.Trim)
Else
PrintPreviewControl1.AutoZoom = True
End If
ComboBox1.Visible = True
btnPrev.Visible = True
Label2.Visible = True
PrintPreviewControl1.Visible = True
Me.PrintPreviewControl1.Show()
Catch ex As Exception
MsgBox(ex.ToString, , "Изберете текстов файл !")
End Try
където процедурата се изпълнява само, ако избрания файл има продължение ".TXT". В първия момент ComboBox1 няма избрана стойност, затова PrintPreviewControl1.AutoZoom = True. Визуализира се групата обекти от т.3.15. и съответно PrintPreviewControl1.
-
Добавете процедурата pd_PrintPage със следното съдържание:
Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As
PrintPageEventArgs)
Dim linesPerPage As Single = 0
Dim yPos As Single = 0
Dim count As Integer = 0
Dim leftMargin As Single = ev.MarginBounds.Left
Dim topMargin As Single = ev.MarginBounds.Top
Dim line As String = Nothing
' Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics)
' Print each line of the file.
While count < linesPerPage
line = streamToPrint.ReadLine()
If line Is Nothing Then
Exit While
End If
yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin,
yPos, New StringFormat())
count += 1
End While
' If more lines exist, print another page.
If Not (line Is Nothing) Then
ev.HasMorePages = True
Else
ev.HasMorePages = False
End If
End Sub
Забележка: Процедурата е взета от фирмените примери.
-
Програмният текст в събитийната процедура btnPrev_Click на бутона е същия, както в събитийната процедура на позиция PrintPreviewControl от падащото меню. Може да се изпълни посредством препратка.
-
За да може да се извършва мащабиране на визуализирания текстов файл е необходимо в Collection на Items на ComboBox1 да се запишат стойностти по-малки и по-големи от 1.0.
-
За изпълнението на позиция PrintPreviewDialog е необходимо за се избере и постави върху формата едноименния обект.
-
В събитийната процедура на позицията PrintPreviewDialog от падащото меню въведете следния текст:
Dim pd As PrintDocument = New PrintDocument()
Dim Lb As String
Try
Lb = Label1.Text
If UCase(Lb.Substring(Lb.Length - 4)) <> ".TXT" Then Exit Sub
streamToPrint = New StreamReader(Me.Label1.Text)
printFont = New Font("Arial", 10)
AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
Me.PrintPreviewDialog1.Document = pd
PrintPreviewDialog1.MaximizeBox = False
PrintPreviewDialog1.MinimizeBox = False
PrintPreviewDialog1.WindowState =
FormWindowState.Maximized
Me.PrintPreviewDialog1.ShowDialog ()
Catch ex As Exception
‘Съобщение
Finally
streamToPrint.Close ()
End Try
Процедурата ще визуализира текстови файлове с продължение ".TXT".
-
Препоръчително е при изпълнението на отделните позиции от основното и падащото меню да се визуализират само тези обекти, които имат отношение към изпълняваните функции. За тази цел в състава на програмата може да се включи процедурата ClearObj със следния текст:
Sub ClearObj ()
Label1.Visible = False
Label2.Visible = False
Label3.Visible = False
Button1.Visible = False
Button2.Visible = False
btnPrev.Visible = False
ComboBox1.Visible = False
Printers.Visible = False
PrintPreviewControl1.Visible = False
End Sub
-
Задание за самостоятелна разработка.
-
По аналогичен начин да се разработи позицията PrintDialog от падащото меню.
-
Да се разработи проект, включващ RichTextBox. Като се използват функциите за маркиране и копиране на части от текст да се програмират възможности за оцветяване на части от текста и промяна съответно на шрифта.
-
Да се разработи програма за записване във файл на въведен текст и с помощта на диалогови форми да се програмират отделни операции с файловете.
Сподели с приятели: |