Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для natrox
14 / 18 / 5
Регистрация: 13.04.2011
Сообщений: 148
.NET 2.x

Кнопки в стиле Windows 8

04.09.2013, 03:56. Показов 2268. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени,

Вопрос следующего характера. Решил попробовать сделать кнопки в приложении аля Win8, т.е. на кнопку наводишь она изменяет внешний вид. Задача вроде простая, но есть вопрос как сделать универсальный алгоритм событий работы с кнопками и вообще возможно ли это?
Я делаю вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            button2.MouseEnter += new EventHandler(button2_MouseEnter);
            button2.MouseLeave += new EventHandler(button2_MouseLeave);
            button3.MouseEnter += new EventHandler(button3_MouseEnter);
            button3.MouseLeave += new EventHandler(button3_MouseLeave);
        }
 
        void button2_MouseLeave(object sender, EventArgs e)
        {
            this.button2.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img1_1));
        }
 
        void button2_MouseEnter(object sender, EventArgs e)
        {
            this.button2.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img1_2));
        }
 
        void button3_MouseLeave(object sender, EventArgs e)
        {
            this.button3.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img2_1));
        }
 
        void button3_MouseEnter(object sender, EventArgs e)
        {
            this.button3.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img2_2));
        }
    }
Тут описание только 2-х кнопок, а если кнопок у меня будет допустим 15. Слишком много кода получиться. Подскажите пожалуйста как сделать пограмотнее. Хочется не просто писать рабочий код, а грамотный рабочий код. За ранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2013, 03:56
Ответы с готовыми решениями:

Кнопки в стиле Ubuntu
Собственно вопрос, можно ли сделать такое? Просто поставил тему на винду, кнопки там приятнее глазу. В гугле ничего не нашел.

MenuStrip в стиле Windows 7
Не могу нигде найти как сделать панель меню как в системе. Я имею ввиду стиль отображения. Вообще это и к другим контролам относится, они...

Приложения в стиле Метро под Windows 7
Кто что знает, как добиться в VS C# 2010 эффекта окон стиля Метро, что то на подобие что сделали на делфи, не теряя производительности!? ...

16
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 06:13
Для этого создаешь свой класс, например MyButton:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace MyButton
{
    public class MyButton:Button
    {
        public MyButton()
        {
            this.MouseEnter += new EventHandler(MyButton_MouseEnter);
            this.MouseLeave += new EventHandler(MyButton_MouseLeave);
        }
        void MyButton_MouseLeave(object sender, EventArgs e)
        {
            this.BackColor = Color.Green;
        }
 
        void MyButton_MouseEnter(object sender, EventArgs e)
        {
            this.BackColor = Color.Red;
        }
    }
}
После этого перестраиваешь проект и в ToolBox(Панель Элементов) появляется новый компонент, который можно добавлять на форму как обычную кнопку..
2
 Аватар для natrox
14 / 18 / 5
Регистрация: 13.04.2011
Сообщений: 148
04.09.2013, 07:27  [ТС]
Проверил, спасибо, работает Правда с картинками не получиться таким методом сделать, но с вашей подачи появилась идея по лучше.
использую символ с прозрачным фоном как фоновую картинку для кнопки и буду менять событиями цвет фона
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 08:42
Цитата Сообщение от natrox Посмотреть сообщение
Правда с картинками не получиться таким методом сделать
почему не получается? у меня работает:
C#
1
2
3
4
5
6
7
8
9
void MyButton_MouseLeave(object sender, EventArgs e)
        {
            this.BackgroundImage = Properties.Resources.b1;
        }
 
        void MyButton_MouseEnter(object sender, EventArgs e)
        {
            this.BackgroundImage = Properties.Resources.b2;
        }
0
 Аватар для natrox
14 / 18 / 5
Регистрация: 13.04.2011
Сообщений: 148
04.09.2013, 10:54  [ТС]
Цитата Сообщение от aleks_pilipenko Посмотреть сообщение
почему не получается? у меня работает
да не, это то понятно что будет работать. в том смысле что если для каждого события и для каждой кнопки разные картинки делать, то опять вернемся к изначальной каше кода
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 11:40
Да нет, можно переписать код кнопки и формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace MyButton
{
    public class MyButton : Button
    {
        Bitmap b1, b2;
        public MyButton()
        {
            this.MouseEnter += new EventHandler(MyButton_MouseEnter);
            this.MouseLeave += new EventHandler(MyButton_MouseLeave);
        }
        public MyButton(Bitmap b1,Bitmap b2)
        {
            this.MouseEnter += new EventHandler(MyButton_MouseEnter);
            this.MouseLeave += new EventHandler(MyButton_MouseLeave);
            this.b1 = b1;
            this.b2 = b2;
        }
        void MyButton_MouseLeave(object sender, EventArgs e)
        {
            this.BackgroundImage = b1;
        }
 
        void MyButton_MouseEnter(object sender, EventArgs e)
        {
            this.BackgroundImage = b2;
        }
    }
}
C#
1
2
3
4
5
 private void Form1_Load(object sender, EventArgs e)
        {
            MyButton MB = new MyButton(Properties.Resources.b1, Properties.Resources.b2);
            this.Controls.Add(MB);
        }
Кстати, можно в свойства кнопки добавить свойства B1 & B2, тогда можно прямо в конструкторе формы добавлять нужные картинки, наверное так лучше будет?

Добавлено через 19 минут
вот свойства добавил:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace MyButton
{
    public class MyButton : Button
    {
        Bitmap b1, b2;
        public Bitmap B1
        {
            get { return b1; }
            set { b1 = value; }
        }
        public Bitmap B2
        {
            get { return b2; }
            set { b2 = value; }
        }
        public MyButton()
        {
            this.MouseEnter += new EventHandler(MyButton_MouseEnter);
            this.MouseLeave += new EventHandler(MyButton_MouseLeave);
        }
        public MyButton(Bitmap b1,Bitmap b2)
        {
            this.MouseEnter += new EventHandler(MyButton_MouseEnter);
            this.MouseLeave += new EventHandler(MyButton_MouseLeave);
            this.b1 = b1;
            this.b2 = b2;
        }
        void MyButton_MouseLeave(object sender, EventArgs e)
        {
            this.BackgroundImage = b1;
        }
 
        void MyButton_MouseEnter(object sender, EventArgs e)
        {
            this.BackgroundImage = b2;
        }
    }
}
1
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
04.09.2013, 11:58
Цитата Сообщение от aleks_pilipenko Посмотреть сообщение
Для этого создаешь свой класс, например MyButton:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace MyButton
{
    public class MyButton:Button
    {
        public MyButton()
        {
            this.MouseEnter += new EventHandler(MyButton_MouseEnter);
            this.MouseLeave += new EventHandler(MyButton_MouseLeave);
        }
        void MyButton_MouseLeave(object sender, EventArgs e)
        {
            this.BackColor = Color.Green;
        }
 
        void MyButton_MouseEnter(object sender, EventArgs e)
        {
            this.BackColor = Color.Red;
        }
    }
}
После этого перестраиваешь проект и в ToolBox(Панель Элементов) появляется новый компонент, который можно добавлять на форму как обычную кнопку..
сделал так, но почему-то в ToolBox не появилось ничего. в чем может быть проблема?
0
 Аватар для natrox
14 / 18 / 5
Регистрация: 13.04.2011
Сообщений: 148
04.09.2013, 12:06  [ТС]
Цитата Сообщение от Rust511 Посмотреть сообщение
сделал так, но почему-то в ToolBox не появилось ничего. в чем может быть проблема?
По идее должно появиться, в виде синей шестеренки. У меня в самом верху появилось

aleks_pilipenko, да, точно. Спасибо, очень полезно, думаю еще не раз пригодиться
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 12:11
Цитата Сообщение от Rust511 Посмотреть сообщение
в чем может быть проблема?
пересобери проект, достаточно просто один раз запустить..

Добавлено через 32 секунды
Цитата Сообщение от Rust511 Посмотреть сообщение
в чем может быть проблема?
пересобери проект, достаточно просто один раз запустить..
0
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
04.09.2013, 12:14
ну так нажал Rebuild, что еще надо-то=\ не появляется. то ли я дурак, то ли лыжи не едут..
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 12:17
Цитата Сообщение от Rust511 Посмотреть сообщение
ну так нажал Rebuild,
скинь проект, посмотрю, можно конечно и по TeamViewer связаться..
0
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
04.09.2013, 12:19
в общем, если через дизайнер самому добавлять, то кнопка появляется на форме, а вот в тулбоксе ее все равно нет
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 12:22
Цитата Сообщение от Rust511 Посмотреть сообщение
в общем, если через дизайнер самому добавлять
скинь проект посмотреть, а то непонятно...
0
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
04.09.2013, 12:23
вот
Вложения
Тип файла: rar WindowsFormsApplication2.rar (38.5 Кб, 16 просмотров)
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 12:27
Ну кнопка сразу появилась, давай по TeamViewer свяжемся? Покажу где..
0
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
04.09.2013, 12:32
если только вечером, я на работе, тут трафик ограниченный=)
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
04.09.2013, 12:35
ок, постучись в скайп: aleks16pilipenko или на мыло, что в подписи...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.09.2013, 12:35
Помогаю со студенческими работами здесь

Перехват нажатия кнопки на Windows Mobile
Уважаемые форумчане! Пишу приложения для Windows Mobile 6.1. Задача следующая. Есть несколько приложений работающих в полноэкранном...

Отлов нажатия кнопки перезагрузки Windows
Здравствуйте, подскажите кто знает, как отловить событие перезагрузки или выключения компьютера? ну и к примеру отправки уведомления на...

Кнопки неправильной формы в Windows Forms
подскажите,пожалуйста,как можно реализовать следующее: загружаю на форму картинку без фона (пример прилагается),нужно,чтобы при наведении...

Открыть форму windows нажатием кнопки мыши
Всем привет! Я пытаюсь сделать редактор html документа. для этого использую WebBrouser. Хочу сделать так, чтоб при двойном нажатии на...

Добавление кнопки в всплывающие окно Windows Form
Всем привет.Я в С# не очень, и у меня возникла проблема.Как можно в всплывающие окно, например, кнопки добавить кнопку.Как я понял с помощь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru