1432
.pdfпараметры элемента управления автоматически восстанавливались при отображении содержащей их формы и автоматически сохранялись при закрытии формы.
Для создания параметра в окне свойств формы в группе ApplicationSettings нужно щелкнуть мышью по строке PropertyBinding, затем по возникшей там кнопке (рис. 11.1). После этого действия появляется окно Параметры приложения для Form1 (рис. 11.2), в котором выбирается параметр и задается его имя.
Рис. 11.2. Окно Параметры приложения для Form1
Например, для параметра ClientSize можно указать имя U_size, а для параметра Location – имя U_loc. Эти параметры позволят при перезапуске приложения получать его окно с сохраненными размерами и положением. Добавить, изменить или удалить параметры можно в окне Свойства проекта, открыв его с помощью контекстного меню после щелчка правой кнопкой мыши по имени проекта в Обозревателе решений.
Рис. 11.3. Изменение параметров в окне Свойства проекта
139
Объект My.Settings
Объект My.Settings предоставляет доступ к параметрам приложения и позволяет динамически хранить и извлекать свойства и другие сведения для приложения. Свойства объекта My.Settings обеспечивают доступ к параметрам приложения. Каждый параметр имеет имя, тип, область действия, значение, и эти настройки определяют доступ к каждому параметру в объекте My.Settings:
Имя – определяет имя свойства.
Тип – определяет тип свойства.
Область действия может принимать одно из двух значений: Приложение – свойство доступно только для чтения. Пользователь – свойство доступно для чтения и записи.
Значение – является значением по умолчанию.
Вследующей строке кода выполняется чтение параметра
User_Size.
Label1.Text = My.Settings.User_Size.ToString()
Параметры пользователя можно изменить, присваивая новое значение свойству объекта параметров My.Settings, например, так можно изменить свойство User_Name:
My.Settings.User_Name = “Сидоров С.С.”
Для сохранения измененных пользовательских параметров можно использовать метод My.Settings.Save.
My.Settings.Save()
Отметим, что все параметры в примерах, нужно определять так, как было описано выше – в окне Свойства формы или в окне
Свойства проекта.
Таблица свойств пользовательских параметров
Можно отобразить параметры пользователя, заполнив элемент управления PropertyGrid. Для этого необходимо выполнить следующие действия:
1.Добавить элемент управления PropertyGrid на форму.
2.Задать объект My.Settings в качестве объекта таблицы свойств. PropertyGrid1.SelectedObject = My.Settings
3.Настроить таблицу свойств для отображения только параметров пользователей.
140
Dim U_A As New System.Configuration.UserScopedSettingAttribute
Dim A As New System.ComponentModel.AttributeCollection(U_A)
PropertyGrid1.BrowsableAttributes = A
Чтобы отобразить только параметры приложения, нужно использовать атрибут ApplicationScopedSettingAttribute вместо UserScopedSettingAttribute.
Пример программы
В примере параметры пользователя отражаются в таблице при загрузке формы, а также в поле ListBox после щелчка по управляющей кнопке. Параметры приложения сохраняются в процедуре обработки события Завершение работы с формой.
‘ Пример 11.1
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button1.Click
ListBox1.Items.Add(My.Settings.U_size.ToString())
ListBox1.Items.Add(My.Settings.U_Loc.ToString())
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load PropertyGrid1.SelectedObject = My.Settings
Dim userAttr As New _ System.Configuration.UserScopedSettingAttribute Dim attrs As New _ System.ComponentModel.AttributeCollection(userAttr) PropertyGrid1.BrowsableAttributes = attrs
End Sub
Private Sub Form1_FormClosed(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.FormClosedEventArgs) _ Handles MyBase.FormClosed
My.Settings.Save() End Sub
End Class
141
11.2. Справочная информация
Интерес к программе со стороны пользователя повышается, если она снабжена хорошей справочной информацией. Удобную для просмотра справку с произвольным числом разделов можно создать в текстовом файле на языке HTML.
Для присоединения справки к приложению можно использовать компонент HelpProvider. Разделы справки затем можно привязать к определенным элементам управления на форме.
Порядок подключения справки
1.Перетащить компонент HelpProvider из панели элементов в форму.
2.В окне Свойства задать значение свойству HelpNamespace в виде CHM-, COLили HTM-файла справки.
3.Выбрать элемент управления, к которому нужно привязать раздел справки, и задать свойство HelpKeyword. Это ключевое слово (строка), по которому в файле справки будет найден соответствующий раздел.
4.В окне Свойства присвойте свойству HelpNavigator значение перечисления HelpNavigator. Это определяет способ передачи свойства HelpKeyword в справочную систему. Ниже приведены возможные параметры и их описания:
AssociateIndex – указывает, что индекс для данного раздела выполняется в заданном URL.
Find – указывает, что отображается страница поиска заданного URL-адреса.
Указатель – указывает, что отображается указатель заданного URL-адреса.
KeywordIndex – указывает ключевое слово для поиска и действие для выполнения в заданном URL-адресе.
TableOfContents – указывает, что отображается оглавление файла справки HTML 1.0.
Topic – указывает, что отображается раздел, на который ссылается заданный URL-адрес.
Во время выполнения нажатие клавиши F1 при находящемся в фокусе элементе управления (для которого заданы свойства HelpKeyword и HelpNavigator) открывает файл справки, связанный с
142
компонентом HelpProvider. Отметим, что компонент HelpProvider можно использовать для отображения всплывающей справки.
Создание файла справки
Создайте текстовый файл, имеющий расширение .htm. В заголовке файла поместить описания ключевых слов. Файл должен иметь в заголовке мета-тег, а также описания ключевых слов.
Пример 11.2
<html>
<head>
<META HTTP-EQUIV="Htm-Help"
Content="PROG.htm#Main_Contents"> <KEYWORD VALUE="R0" TITLE="Введение" HREF="PROG.htm#Main_contents">
<KEYWORD VALUE="R1" TITLE="Первый раздел" HREF="PROG.htm#R1">
<KEYWORD VALUE="R2" TITLE="Второй раздел" HREF="PROG.htm#R2">
</head>
Первый раздел в файле справки следует назвать Main_contents, остальные могут иметь произвольные имена (в примере R1, R2). Одному разделу может соответствовать несколько ключевых слов, которые отделяются точкой с запятой, например:
<KEYWORD VALUE="R0;запуск;старт"
Количество ключевых слов для раздела не ограничено. Содержимое разделов, включая main_contents, начинается тегом комментария:
<!-- PegHelp -->
Раздел Main_contents обычно содержит ссылки на подразделы. Обратите внимание, что требуется имя файла в дополнение к имени привязки.
Пример 11.3
<body>
<!-- PegHelp -->
<a name="Main_Contents"></a> <b>Введение</b>
143
</p>
<a href="PROG.htm#R0">Введение</a><br> <a href="PROG.htm#R1">Раздел 1</a><br>
В справку можно добавить графические объекты, например: <img src="1.bmp">
Пример справки на языке HTML
В примере создано три раздела, считая Введение. В справке использованы три картинки.
Пример 11.4
<html>
<head>
<META HTTP-EQUIV="Htm-Help"
Content="PROG.htm#Main_Contents"> <KEYWORD VALUE="R0" TITLE="Введение" HREF="PROG.htm#Main_contents">
<KEYWORD VALUE="R1" TITLE="Первый раздел" HREF="PROG.htm#R1">
<KEYWORD VALUE="R2" TITLE="Второй раздел" HREF="PROG.htm#R2">
</head>
<body>
<!-- PegHelp --> <p>
<a name="Main_Contents"></a> </p>
<p>
<a href="PROG.htm#R1">Первый раздел</a><br> <a href="PROG.htm#R2">Второй раздел</a><br> </p>
<b>Введение справки</b> </p>
<p>
Текст введения справки
</p>
<p>
<img src="1.bmp">
144
</p>
<!-- PegHelp -->
<!-- ******* TOPIC BREAK ******* --> <hr>
<a name="R1"></a>
<p><b>Первый раздел справки</b></p> <p>
Текст первого раздела справки
</p>
<p>
<img src="2.2bp"> </p>
<!-- PegHelp -->
<!-- ******* TOPIC BREAK ******* --> <hr>
<a name="R2"></a>
<p><b>Второй раздел справки</b></p> <p>
Текст первого раздела справки
</p>
<p>
<img src="3.bmp"> </p>
</body>
</html>
11.3. Чтение данных из книги Microsoft Excel
Для чтения данных с листа книги Microsoft Excel необходимы команды из пространства имен System.Data.OleDb. Для доступа к файлу формируется строка подключения.
‘Пример 11.5
‘имя файла
Dim F_N As String = "Фирма.xls"
‘ строка соединения
Dim C_S As String = String.Format( _ "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties= _ 'Excel 8.0;HDR=No';Data Source={0}", F_N)
145
Спомощью оператора OleDbConnection открывается соединение.
‘создать соединение
Dim CNT As OleDbConnection = New OleDbConnection(C_S)
‘открыть соединение
CNT.Open()
Спомощью оператора GetOleDbSchemaTable создается структура, содержащая схему книги Excel.
‘Пример 11.6
‘получить схему таблицы
Dim S_T As DataTable = CNT.GetOleDbSchemaTable( _
OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
Каждая строка полученной структуры содержит сведения об одном из листов. Колонка schemaTable.Rows[i].ItemArray[2] содержит названия листов, а schemaTable.Rows[i].ItemArray[7] – даты модификации листов.
‘Пример 11.7
‘отобразить названия листов
For i As Integer = 0 To S_T.Rows.Count - 1
ListBox1.Items.Add(S_T.Rows(i).ItemArray(2).ToString())
ListBox1.Items.Add(S_T.Rows(i).ItemArray(7).ToString())
Next
Колонка schemaTable.Rows[i].ItemArray[0] содержит имя первого листа.
Dim sh_1 As String = S_T.Rows(0).ItemArray(2).ToString()
С помощью оператора StringFormat формируется строка запроса для первого листа. Оператор OleDbDataAdapter реализует запрос с данной строкой. Оператор Fill обновляет строки в объекте System.Data.DataSet. Оператор Tables передает выбранные строки таблицы в переменную tb.
‘Пример 11.8
‘запрос на данные с листа 1
Dim sel_cel As String = String.Format( _ "SELECT * FROM [{0}]", sh_1)
‘ объект OleDbDataAdapter
146
Dim Adp As OleDbDataAdapter = New OleDbDataAdapter( _
sel_cel, CNT)
‘ объект DataSet
Dim D_S As DataSet = New DataSet("EXCEL")
‘ читать данные из файла в объет DataSet Adp.Fill(D_S)
‘ объект DataTable
Dim TB As DataTable = D_S.Tables(0)
Отобранные с помощью запроса данные выводятся в поле
ListBox.
‘ отобразить данные с листа 1
For Each ROW As DataRow In TB.Rows S = ""
For Each COL As Object In ROW.ItemArray S = S + " " + COL.ToString()
Next ListBox1.Items.Add(S) Next
Пример программы
В примере данные читаются с листа 1 документ фирма.xls. Прочитанная информация выводится в поле компонента ListBox.
‘ Пример 11.9
Imports System.Data.OleDb Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click
‘ имя файла
Dim F_N As String = "Фирма.xls"
‘ строка соединения
Dim C_S As String = String.Format( _ "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties= _ 'Excel 8.0;HDR=No';Data Source={0}", F_N)
147
‘ объект DataSet
Dim D_S As DataSet = New DataSet("EXCEL")
‘ создать соединение
Dim CNT As OleDbConnection = New OleDbConnection(C_S)
‘открыть соединение
CNT.Open()
‘получить схему таблицы
Dim S_T As DataTable = CNT.GetOleDbSchemaTable( _
OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
‘ отобразить названия листов
For i As Integer = 0 To S_T.Rows.Count - 1 ListBox1.Items.Add(S_T.Rows(i).ItemArray(2).ToString()) Next
‘ лист 1
Dim sh_1 As String = S_T.Rows(0).ItemArray(2).ToString()
‘ запрос на данные с листа 1
Dim sel_cel As String = String.Format( _ "SELECT * FROM [{0}]", sh_1)
‘ объект OleDbDataAdapter
Dim Adp As OleDbDataAdapter = New OleDbDataAdapter( _ sel_cel, CNT)
‘читать данные из файла в объект DataSet Adp.Fill(D_S)
‘объект DataTable
Dim TB As DataTable = D_S.Tables(0)
Dim S As String
‘ отобразить данные с листа 1
For Each ROW As DataRow In TB.Rows
148