Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > "Залипание/отлипание" кнопки


Автор: Snatch 22.11.2006, 08:48
Доброго времени суток!
На форме имеется кнопка и есть 2 события (например, событие_1 и событие_2).

Для понятия вопроса: В чате NetworkAssistant есть кнопки "вкл/выкл звук", "поверх всех окон/обычно" и что-то еще.

Вопрос: как сделать, что бы при нажатии на кнопку она оставалась "утопленной"/нажатой (срабатывает событие_1), а при вовторном нажатии на нее она возвращалась в свое изначальное положение (срабатывает событие_2 [отмена события_1])? (чекБокс не очень красиво)

Автор: ivashkanet 22.11.2006, 09:15
Цитата(Snatch @  22.11.2006,  07:48 Найти цитируемый пост)
чекБокс не очень красиво

И всетаки это CheckBox smile
У которого свойство Appearance = Button  smile 

Автор: Snatch 23.11.2006, 05:50
Удивительно но факт smile Никогда бы не подумал, что чекБокс можно сделать "чекБутоном"..
Спасибо ivashkanet, все получилось, только возникли пару вопросиков:
1) как сделать на этом "чекБутоне" 2 разных картинки (картинка_1 - при отжатой кнопке, картинка_2 - при нажатой)?

2) можно ли уменьшить размеры самого "чекБутона" (по вертикали и по горизонтали)? В свойствах имеются поля Width и Hight, но меньше установленных по умолчанию они не делаются smile

Заранее спасибо

Автор: ivashkanet 23.11.2006, 08:47
1) 
Код

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox checkBox = (CheckBox)sender;
            if (checkBox.Checked) checkBox.Image = Properties.Resources.My1000;
            else checkBox.Image = Properties.Resources.Medved;
        }

2) В свойствах убери AutoSize = true.

Автор: Snatch 24.11.2006, 06:28
1) Пока что не разобрался. Показал нашему программеру, он сказал, что какой-то странный код... Будем разбираться
2) Не заметил сразу, да и вчера пришлось пару раз просматривать все свойства, что бы найти smile

Автор: ivashkanet 24.11.2006, 08:35
Цитата(Snatch @  24.11.2006,  05:28 Найти цитируемый пост)
Показал нашему программеру, он сказал, что какой-то странный код...

 smile В каком месте странный?

Все просто:
Код

CheckBox checkBox = (CheckBox)sender;

Получаем тот чекбокс на который кликнули (класс, который сгенерировал событие всегда передается в переменной sender).
Код

if (checkBox.Checked) checkBox.Image = Properties.Resources.My1000;

Если чекбокс, после нажатия на него, стал нажатым (checkBox.Checked == true), то ставим картинку нажатого состояния.
Код

else checkBox.Image = Properties.Resources.Medved;

Если нет, то отжатого.
Snatch, ты не смотри, что у меня медведы разные на картинках smile Просто это первые картинки которые попались под руку.
Я их загнал в ресурсы (Properties.Resources) поэтому оттуда их и беру. Ты можешь загнать их куда угодно, хоть каждый раз из файла считывать  smile 

Автор: Snatch 24.11.2006, 10:39
Странный... ну он (программер) немного по своему (я его не понял) делает данную операцию.

Код

else checkBox.Image = Properties.Resources.Medved;

Медведа я сразу заметил при беглом осмотре.
Добавил в ресурсы (Resourses) папку test, в которую добаил 2 файла (графика), пробовал вызывать: 
Код

else checkBox.Image = Properties.Resources.test.image1;

image1 - файлик image1.gif добавлял через Add в самой студии, студия ругается на test (не пробовал добавить в корень (Resoures)!). Смотрел как делал наш программер, он писал (на сколько я помню):
Код

Resources.image1.gif


Сам принцип я понял, так что не надобыло расписвывать все smile

З.Ы.: я начинающий, больно не бить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)