Master of Orion
|
||||||
1 | ||||||
Добавление кнопок в run-time05.10.2012, 11:50. Показов 3347. Ответов 26
Метки нет (Все метки)
Здравствуйте. Имеется вот такой код:
0
|
05.10.2012, 11:50 | |
Ответы с готовыми решениями:
26
Создание меню в run time Разница в координатах в run-time и design-time Compile-time и run-time методы и функции Разница в координатах в run-time и design-time |
430 / 431 / 93
Регистрация: 16.07.2012
Сообщений: 886
|
|
07.10.2012, 18:43 | 21 |
Не работает у вас потому что вы Thread.Sleep в потоке пользовательского интерфейса делаете. Это же основной цикл приложения - пока обработчик события Click не завершиться, интерфейс не перерисуется и вообще никакие события обрабатываться не будут (приложение "зависнет"). Именно поэтому в потоке интерфейса Sleep (или любые длительные операции) вызывать не рекомендуется. Либо запускайте отдельный поток и в нем периодически меняйте Background, либо создайте таймер и в обработчике таймера опять же меняйте Background. Только учтите, что когда вы будете обращаться к контролам из другого потока, то это нужно делать через Dispatcher.Invoke или Dispatcher.BeginInvoke - иначе исключение возникнет.
0
|
Master of Orion
|
|
07.10.2012, 18:48 [ТС] | 22 |
canopen, насчет исключений доступа из чужого потока я знаю, поэтому на винформе и пользовался Thread.Sleep, потому что с инвоками не работал. Спасибо, сейчас попробую, если не получится, напишу сюда еще).
Кстати, возник вопрос, смысл в том, что мне нужно менять не два цвета, оранжевый-зеленый, а так "старый цвет"-"зеленый"-старый цвет". Вопрос: нельзя ли применить тут анимацию? Потому что насколько я помню, анимация сохраняет значение свойства, которое меняет, существовавшее на момент активации, и при отмене возвращает его в исходное состояние. Мне такое поведение как раз и нужно: был цвет кнопки оранжевый - станет зеленым, отменить - чтобы стал обратно оранжевым, был черный - сделать зеленый потом отменить - чтобы был опять черный.
0
|
430 / 431 / 93
Регистрация: 16.07.2012
Сообщений: 886
|
||||||
07.10.2012, 19:18 | 23 | |||||
Через анимацию конечно тоже можно. Примерно так будет:
0
|
Master of Orion
|
||||||
07.10.2012, 19:53 [ТС] | 24 | |||||
canopen, изменил метод blink, не хочет:
0
|
430 / 431 / 93
Регистрация: 16.07.2012
Сообщений: 886
|
|
07.10.2012, 20:12 | 25 |
Ну, если вы изменили ТОЛЬКО метод Blink, то удивляться не стоит что ничего не работает - у вас же если не ошибаюсь этот метод в цикле вызывался. И кроме того после вызова Blink цвет в исходный сбрасывался. А теперь циклы и сбрасывание в исходный цвет не нужны - анимации сама будет повторяться столько раз, сколько задано при ее создании и сама в исходное состояние вернется.
К тому же у вас там такие маленькие интервалы стоят что их трудно заметить невооруженным взглядом. Поставьте хотя бы 100 мс.
0
|
Master of Orion
|
||||||
07.10.2012, 20:46 [ТС] | 26 | |||||
canopen, Спасибо еще раз) Проблема была в том, что сразу после Blink у меня стоял Reset(), он анимацию обрубал.) Интервал 100 как раз стоял, просто было долго из-за цикла, сейчас все нормально
Добавлено через 17 минут Извиняюсь, последний вопрос: как после того, как анимация закончилась сделать так, чтобы в последний раз она не возвращалась в исходное положение (или закрасить клетку, когда закончится анимация). Я так понимаю, что анимация в своем потоке выполняется, поэтому следующей строчкой после вызова анимации нельзя просто Background = ... , вот что посоветуете? Добавлено через 15 минут Решил:
0
|
430 / 431 / 93
Регистрация: 16.07.2012
Сообщений: 886
|
|||||||||||
07.10.2012, 20:53 | 27 | ||||||||||
Когда создаете анимацию, то предварительно установите значение которое в итоге должно свойство иметь:
1
|
07.10.2012, 20:53 | |
07.10.2012, 20:53 | |
Помогаю со студенческими работами здесь
27
Run-time компоненты. Run-time error 9' Run-Time DLL Создание в run time Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |