30.01.2008, 15:10 | #1 |
Участник
|
Проблема с кнопкой в мастере
Я делаю мастер, при некоторых условиях устанавливаю активной или неактивной кнопку "назад". Но иногда происходит странная вещь: кнопка становится серой, но при этом (о ужас!) она работает, тоесть на нее можно нажать и перейти на предыдущую страницу; и наоборот: кнопка вроде бы активна, но нажать на нее нельзя. При этом и метод isBackEnabled у класса и даже метод enabled у контрола backButton возвращают правильные значения.
Если кто-нибудь с таким сталкивался, объясните пожалуйста в чем дело. |
|
30.01.2008, 20:55 | #2 |
Участник
|
Я сталкивался.
Веники не летают.Это потому,что класс "думает", что кнопочку нажать можно и нажимает её,ведь на самой форме, практически никакие методы у кнопки с проперти "Enabled" в "No" вызываться не будут.Я бы, поставил брейкпоинт в методе класса,который отвечает за смену табов и посмотрел,что его вызывает,в каком методе ошибка.И вот когда эта смена табов происходит,вернее,перед ней,наш классик смотрит,а какой проперти у внутренней переменной этого батона и ему,поверьте,начхать,что вы там видите,если это значение - тру,то всё отработает... И я так подозреваю,на всякий случай,что проперти "Bold" в "Light" никто не ставит)) |
|
31.01.2008, 09:05 | #3 |
Участник
|
Я все равно не понимаю))
Кнопка "Назад" - это FormButtonControl backButton из класса SysWizard. С этим backButton в SysWizard делается ровно две вещи: 1. В методе prompt он инициализируется, на него вешается меню итем, по которому вызывается метод SysWizard.back() 2. В методе enableButtons у этого контрола устанавливается свойство Enabled Больше ничего с этим backButton не делается и он никуда не передается, поправьте меня если я неправ. Я же в своем классе только использую метод SysWizard.backEnabled(), т.е. backButton никак не трогаю. Поэтому мне непонятно, где может устанавливатся проперти "Bold" в "Light" или что-то подобное. И что значит класс "думает"? Я заметил, что это проявляется только на определенном табе, так что буду разбираться. |
|
31.01.2008, 11:38 | #4 |
Участник
|
Ну ведь метод back() вызывается,в котором текущий номер таба уменьшается,не так ли?Если вы абсолютно уверены,что переменная кнопки backButton тут не при чём,значит где-то сбрасывается tabIdx без участия кнопки,скорее всего - это ваши модификации,без этого на предыдущую страницу визарда вы не попадёте. tabIdx сбрасывается в back() и в изменяется в setTab(),но, всё таки, посмотрите метод enableButtons и то,что присваивается в строке backButton.enabled(tabIdx!=1 && backEnabled[tabIdx]);
|
|
31.01.2008, 13:51 | #5 |
Участник
|
Я наверное плохо объяснил. Проблема в том, что я могу перейти назад именно по нажатию на задизэбленую кнопку (при этом backButton.enable() возвращает false), чего про-моему не должно быть.
|
|
31.01.2008, 13:53 | #6 |
Участник
|
|
|
31.01.2008, 14:14 | #7 |
Участник
|
Конечно, ведь по нажатию на backButton вызывается SysWizard.back().
|
|
31.01.2008, 14:46 | #8 |
Участник
|
Ну хорошо,если backButton.enable() возвращает false,как вы писали,то поставьте дополнительную проверку в самом back(), если это проперти равно false, то tabIdx не уменьшать.А ещё,лучше всего - допишите свой метод,который будет вызываться в самом конце,перед передачей управления форме и корректно выставлять проперти enable и отследите,почему на форме у контрола неправильное свойство,не соответствующее действительности.
Хотя, я уверен что путаница где-то в индексах.Может быть, вы добавляли или вставляли новые табы вручную? |
|