jek1976

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Логику работы формы не понял. | Я делаю БД для хранения библиографической информации о печатных и электронных публикациях (подобные аналоги программы, имеющиеся в инете, меня не устраивают по функциональности). На данный момент разрабатываю форму для ввода и корректировки данных, заносимых в БД. Общий вид этой формы уже был приведен выше (в предыдущем посте). Если Вам это будет интересно, то я с удовольствием объясню логику работы. Суть в следующем. Вначале, при вводе данных о публикации в окне "Тип публикации" выбирается, собственно, тип публикации из следующего списка - книга, статья, обзор, учебное пособие, методические указания, монография, диссертация. Дело в том, что для каждого из этих типов нужны свои - индивидуальные - поля для занесения данных. Например, для книги достаточно указать автора, название, год издания, издательство и кол-во страниц. А для статьи, кроме автора, названия и года издания, нужны уже другие поля - название журнала, его том и номер, серия, первая и последняя страницы статьи. Поэтому при выборе типа публикации лишние поля на форме становятся неактивными, что я делаю при помощи такого фрагмента кода: Код: 'Действие после выбора ТипаПубликации на форме Private Sub Pole0_AfterUpdate() If Pole4.Text = "статья" Then Pole4.Enabled = False End If . . . End Sub | Далее, в поля, оставшиеся активными для выбранного типа публикации, надо вносить данные. Одновременно с процессом ввода данных формируется строка в поле "Библиографическая запись". Эта строка представляет собой набор таких данных, как ФИО автора, название публикации и прочих, выстроенных друг за другом в определенном порядке. Здесь тоже есть свои правила, которые взаимно отличаются для разных типов публикаций!!! Замечу, что мне нужно, чтобы строка в поле "Библиографическая запись" формировалась при вводе или изменении данных в полях формы! То есть, если я набираю или редактирую текст в поле "Название", то содержимое поля "Библиографическая запись" тоже должно изменяться ОДНОВРЕМЕННО с редактированием соответствующего поля на форме. Аналогично должно происходить и с другими полями. Я делаю это при помощи события Change, привязанного к редактируемому полю и процедуры ПостроительБиблиографическойЗаписи, которая получает управление при этом событии: Private Sub Pole1_Change() Call ПостроительБиблиографическойЗаписи("статья") End Sub Private Sub Pole2_Change() Call ПостроительБиблиографическойЗаписи("труды") End Sub Private Sub Pole3_Change() Call ПостроительБиблиографическойЗаписи("книга") End Sub . . . Public Sub ПостроительБиблиографическойЗаписи(Тип As String) Dim Автор As String Dim Соавторы As String Dim Название As String Dim Издательство As String Dim Год As String Dim Том As String Dim Номер As String Dim Страницы As String Dim Конференция As String Dim МестоДатаПроведения As String Dim МестоДатаОпубликования As String Dim Серия As String 'опрос элементов управления Pole1.SetFocus : Автор = Pole1.Text Pole2.SetFocus : Соавторы = Pole2.Text Pole3.SetFocus : Название = Pole3.Text Pole4.SetFocus : Издательство = Pole4.Text Pole5.SetFocus : Год = Pole5.Text Pole6.SetFocus : Том = Pole6.Text Pole7.SetFocus : Номер = Pole7.Text Pole8.SetFocus : Страницы = Pole8.Text Pole9.SetFocus : Конференция = Pole9.Text Pole10.SetFocus : МестоДатаПроведения = Pole10.Text Pole11.SetFocus : МестоДатаОпубликования = Pole11.Text Pole12.SetFocus : Серия = Pole12.Text 'построение библиографической записи Select Case Тип Case "статья" БиблиоЗапись = Автор + " " + Соавторы + " " + Название Case "труды" БиблиоЗапись = Автор + " " + Соавторы Case "книга" БиблиоЗапись = Автор + " " + Название End Select БиблиографическаяСтрока.SetFocus 'ИЗ-ЗА ЭТОЙ ПЕРЕСТАНОВКИ ФОКУСА ПРОИСХОДИТ "ПОТЕРЯ" ФОКУСА И НЕВОЗМОЖНО ПРОДОЛЖАТЬ РЕДАКТИРОВАНИЕ В ДРУГИХ ПОЛЯХ ФОРМЫ БиблиографическаяСтрока.Text = БиблиоЗапись End Sub Цитата: Что значит "теряю" и чем это мешает? Какой смысел переформировывать строку после добавления/удаления каждого знака? | Но как я уже сказал, есть проблема в том, что если я редактирую какое-либо поле (например, убираю символы в поле "Название"), то для отображения изменений, внесенных в поле "Название", фокус надо перевести в поле "Библиографическая запись". И при этом курсор из поля "Название" исчезает и редактирование невозможно продолжить, не поставив ВРУЧНУЮ курсор обратно! То есть курсор слетает после ввода/удаления хотя бы одного символа в полях формы. Такая же история и с остальными полями - Год, Издательство, Место издания и проч. Можно было бы, конечно, не делать мгновенное обновление строки в поле "Библиографическая запись", а прикрутить кнопку для ручного обновления информации, но это будет крайне неудобно и придется ее опять же нажимать, чтобы увидеть изменения в поле "Библиографическая запись". Что еще можно придумать, чтобы вернуть фокус от поля "Библиографическая строка" тому элементу, в котором я в данный момент редактирую данные? Или может быть, есть способ передачи данных в определенное поле, минуя необходимость установки фокуса на этом поле, ведь в обычном VBA, да и в других языках, установка фокуса для операций чтения/записи свойств элементов управления НЕ ТРЕБУЕТСЯ. | Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 13:27 05-07-2009 | Исправлено: jek1976, 15:02 05-07-2009 |
|