|
|
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Всем доброго дня! Подскажите плиз: На форме имеется несколько раскрывающихся списков, если в одном из "комбов" пользователь сделал выбор , то в зависимости от выбранного значения и ! комбинации значений других присутствующих на форме комбов ! изменяется интерфейс (состояние флажков, надписи, активность полей и их значения) в коде выглядит как куча условий, причем повторяющихся, иногда при перерисовке все это дело подвисает сек на три и мне становится тоскливо ( Я Access плохо знаю, получается, что вижу то пою, а хотелось бы рациональности. Подскажите, как решаются такие проблемы, буду рад ссылкам на обсуждения подобных тем. И еще один вопрос: форма - свойства - вкл данные - источник записей - три точки...построитель запросов ... построили как из кода VBA обратится к выборке, которая формируется в результате вышеописанных действий, когда есть необходимость из этой выборки зделать еще одну выборку по условию, которое определяется выбором пользователя на форме, собственно пользователь зделал выбор из комбо, находящееся рядом поле должно поменять значение ... его можно вытащить из выборки (организовать поиск или запрос написать?), на которой основана форма, но как к ней обратится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 13:01 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
По первому вопросу: покажи код По второму: см. Me.RecordSet, Me.RecordSetClone RecordSet возвращает данные, отвечающие условиям выборки в источнике записей короче дави F1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 14:30 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Private Sub Opers_Change() If Me![Opers] = "РТА" Then Me.PTA.Enabled = True Else Me.PTA.Enabled = False End If If Me![Opers] <> "Продажа" Then Me.SB1.Visible = False - метки Me.SB2.Visible = False Me.SB3.Visible = False Me.SB4.Visible = False Me.SB5.Visible = False Me.flg1.Visible = False - флажки Me.flg2.Visible = False Me.flg3.Visible = False Me.flg4.Visible = False Me.flg5.Visible = False Me.zn1.Visible = False - поля Me.zn2.Visible = False Me.zn3.Visible = False Me.zn4.Visible = False Me.zn5.Visible = False Me.Hlp.Visible = True Else Me.Hlp.Visible = False End If If Me![Agency] = "Пулково" And Me![Opers] = "Продажа" Then Me.IsxTr.Enabled = True Me.SB1.Caption = "Другие" Me.SB1.Visible = True Me.SB2.Visible = False Me.SB3.Visible = False Me.SB4.Visible = False Me.SB5.Visible = False Me.zn1.Visible = True Me.zn2.Visible = False Me.zn3.Visible = False Me.zn4.Visible = False Me.zn5.Visible = False Me.flg1.Value = False Me.flg1.Visible = True Me.flg2.Visible = False Me.flg3.Visible = False Me.flg4.Visible = False Me.flg5.Visible = False Else Me.IsxTr.Enabled = False End If If Me![Agency] = "ТКП" And Me![Opers] = "Продажа" Then Me.SB1.Visible = True Me.SB2.Visible = True Me.SB3.Visible = True Me.SB4.Visible = True Me.SB5.Visible = True Me.SB1.Caption = "ТКП" Me.SB2.Caption = "ЦКС" Me.SB3.Caption = "Обслуживание" Me.SB4.Caption = "Х 2" Me.SB5.Caption = "АГС" Me![zn1] = "" ---------- значения полей необходимо задать Me![zn2] = "" Me![zn3] = "" Me![zn4] = "" Me![zn5] = "" Me.zn1.Visible = True Me.zn2.Visible = True Me.zn3.Visible = True Me.zn4.Visible = True Me.zn5.Visible = True Me.zn1.Enabled = True Me.zn2.Enabled = False Me.zn3.Enabled = True Me.zn4.Enabled = False Me.zn5.Enabled = False Me.flg1.Value = True Me.flg2.Value = False Me.flg3.Value = True Me.flg4.Value = False Me.flg5.Value = False Me.flg1.Visible = True Me.flg2.Visible = True Me.flg3.Visible = True Me.flg4.Visible = True Me.flg5.Visible = True Else End If If Me![Agency] = "Сибирь" And Me![Opers] = "Продажа" Then Me.SB1.Caption = "Такса Ru" Me.SB2.Caption = "Другие" Me.SB1.Visible = True Me.SB2.Visible = True Me.SB3.Visible = False Me.SB4.Visible = False Me.SB5.Visible = False Me.zn1.Visible = True Me.zn2.Visible = True Me.zn3.Visible = False Me.zn4.Visible = False Me.zn5.Visible = False Me.flg1.Value = True Me.flg2.Value = False Me.flg3.Value = False Me.flg4.Value = False Me.flg5.Value = False Me.flg1.Visible = True Me.flg2.Visible = True Me.flg3.Visible = False Me.flg4.Visible = False Me.flg5.Visible = False Else End If If Me![Agency] = "Аэрофлот" And Me![Opers] = "Продажа" Then Me.SB1.Caption = "Такса Ru" Me.SB2.Caption = "Другие" Me.SB1.Visible = True Me.SB2.Visible = True Me.SB3.Visible = False Me.SB4.Visible = False Me.SB5.Visible = False Me.zn1.Visible = True Me.zn2.Visible = False Me.zn3.Visible = False Me.zn4.Visible = False Me.zn5.Visible = False Me.flg1.Value = True Me.flg2.Value = False Me.flg3.Value = False Me.flg4.Value = False Me.flg5.Value = False Me.flg1.Visible = True Me.flg2.Visible = True Me.flg3.Visible = False Me.flg4.Visible = False Me.flg5.Visible = False Else End If End Sub Это пример только одного Change, а их много + плюс по мимо видимости/невидимости и активности/неактивности полей нужно формировать их значения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 15:35 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
DinN , у меня такое же уродство ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 15:43 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
С подвисанием это не поможет. А с наглядностью кода можно так: Было: Me.SB1.Visible = True Me.SB2.Visible = True Me.SB3.Visible = False Me.SB4.Visible = False Me.SB5.Visible = False Me.zn1.Visible = True Me.zn2.Visible = False Me.zn3.Visible = False Me.zn4.Visible = False Me.zn5.Visible = False Me.flg1.Value = True Me.flg2.Value = False Me.flg3.Value = False Me.flg4.Value = False Me.flg5.Value = False Стало: Show "SB","++---" Show "zn","+----" Show "flg","+----" Плюс описываем процедуру: sub Show(sPrefix as string, sMask as string) dim i as integer for i=1 to len(sMask) me(sPrefix & cstr(i)).visible=(mid(sMask,i,1)="+") next end sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 15:43 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Саныч, супер!!! А главное ведь просто все до боли, а мозгов не хватило :) SQL.RU THE BEST!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 15:52 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
DinN Могу посоветовать только разбить эту форму на несколько... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 15:52 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Я бы с удовольствием, но мой юзер умрет от отчаинья, дело в том, что изначально эта форма содержала четыре подчиненных, какжлая подчиненная в свойствах ист данных имеет выборку из табл (часть полей отсекается + сортировка) и натыкано в областях данных этих форм полей да комбов... В итоге перед пользователем фактически все таблицы на изнанку, все конечно компактно, но ... при вводе пользователь случайно может нажать энтер не там где надо пустое поле сотворить (а таблы связаные!), приходится лезть в базу, а часто при первом вводе тарифов, сборов инфа не фиксируется (прям как суслик, пока запись текущая видно, что все введено, тока внизу , где суммы считаются нулики, а как перейдешь на any запись и вернешься взад глядишь действительна нолики) Короче при вводе бывают глюки, да и не должен пользователь с табличками играться, форма ввода должна быть... Кроме того хотся ускорить тот самый ввод и ужесточить контроль за введенной информацией, а так как опыта не хватает получается как сказал Varan уродство... Благо есть кому подсказать, за что огромное спасибо всем откликающимся!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 16:21 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Саныч , что может помочь избавиться от подвисания при перерисовки интерфейса? Разве причина не в разбухшем коде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 16:41 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
в смысле времени этот код не должен вызывать задержек на 3 сек. скорее всего где-то вычисления в контролах есть. в смысле скорости отображения еще можно добавить Me.Painting = false '------- Show "SB","++---" Show "zn","+----" Show "flg","+----" '------------ Me.Painting = true Me.Repaint Если Acc97 то смотри Docmd.Echo T/F,StatusMes ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 16:45 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Каюсь, есть вычисления :) Байда такая: на форме есть три сбора (флажок - выбран/невыбран, метка - имя сбора, поле - значение), в некоторых случаях значения всех выбранных должно умножаться на 2, вот я и присобачил флажок, если активен - значения всех выбранных сборов помножатся на два, иначе "занять исходное положение". Неужели из - за этого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 16:57 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
а я могу посоветовать перед всеми настройками сделать me.painting=false, а после окончания настроек me.painting=true. Скорость настроек с 3-х секунд упадет до 1 сек (+/- 10 секунд:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 17:14 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
ТЕБЕ ПОВЕЗЛО, ЧТО ВСЕГО 3 сек. ОТЛИЧНЫЙ КОМПУКТЕР! Поздравляю. Вот что значит невнимательность. код про visible и т.д. ПРОСТО НИ ПРИ ЧЕМ. Событие Change отрабатывает на каждое нажатие клавиши. кто такие Me![Agency] Me![Opers] Набирая в них слова всякие ты вызываешь Change столько раз, сколько буквочек на клаве нажал. Просто выдели все, что находится в Change, дальше Edit->Cut перейди в обработчик AfterUpdate и нажми Shift-Insert После чего получи удовольствие от скорости работы своего компуктера -))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 17:16 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Виктоша, Me![Agency] и Me![Opers] енто комбы и в них есть список фиксированных значений, то есть юзер не набирает, а выбирает Основное подвисание при вкл/откл флажков ( флажки сборов и флажок умножения на 2) и то как-то спонтанно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 17:24 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
у флажка Click покажи код того спонтанного флажка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 17:29 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Вспомнил, вычисления я сегодня грохнул, правда ничего не изменилось с подвисанием, я ради теста кликаю по очереди на фигурирующих сдесь четырех флажках, после 3-5 кликов оп задумались...(причем на разных флажках) Private Sub flg4_AfterUpdate() If Me![flg4] = False And (Me![flg1] = True) Then Me!zn1 = "" Me!zn1 = 70 End If If Me![flg4] = False And (Me![flg2] = True) Then Me!zn2 = "" Me!zn2 = 70 End If If Me![flg4] = False And (Me![flg3] = True) Then Me!zn3 = "" Me!zn3 = 100 End If If Me![flg4] = True And (Me![flg1] = True) Then Me!zn1 = "" Me!zn1 = 140 End If If Me![flg4] = True And (Me![flg2] = True) Then Me!zn2 = "" Me!zn2 = 140 End If If Me![flg4] = True And (Me![flg3] = True) Then Me!zn3 = "" Me!zn3 = 200 End If ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 17:38 |
|
||
|
"плавающий интерфейс"
|
|||
|---|---|---|---|
|
#18+
Вот прямая замена "в лоб". Так тоже тормозит? Private Sub flg4_AfterUpdate() Dim bC as Boolean, rC as Boolean Painting = False bC = flg4.Value If bC then if flg1.Value Then zn1.Value = 140 if flg2.Value Then zn2.Value = 140 if flg3.Value Then zn3.Value = 200 Else if flg1.Value Then zn1.Value = 70 if flg2.Value Then zn2.Value = 70 if flg3.Value Then zn3.Value = 100 End if Painting = True End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 18:21 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32424533&tid=1676398]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
189ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 563ms |

| 0 / 0 |
