Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141
1

Поведение BackColor в Button/UserControl

30.01.2018, 14:11. Показов 5005. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Знатоки помогите и разжуйте такой вот вопрос. Допустим у меня есть проект меню которого оформлено в стиле такой программы как CCleaner - как мне настроить поведение меняющегося заднего фона таким образом что бы он был как в данной программе, а именно при наведении на контрол - цвет контрола изменяется (к примеру красный), при убирании курсора с контрола цвет становится прежним (к примеру черный), при клике по контролу он меняет цвет (к примеру на синий) и таковым остается до тех пор пока не будет выбран другой контрол при клике по которому он соответственно станет синим а первый перейдет в первоночальное состояние (черный), также в случае наведения курсора на выбранный контрол он не меняет свой цвет с синего на красный в отличие от не выбранных.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2018, 14:11
Ответы с готовыми решениями:

Изменить BackColor у Label щелчком по Button
Здравствуйте помогите нуба как делать когда нажимаю на button чтоб у label.backcolor был красный а...

Groupbox.BackColor=Transparent, не срабатывает событие click button
В Groupbox есть кнопка, заметил такую вещь - если его цвет поставить в прозрачный, то не...

UserControl + Button
Здравствуйте. При создании своего UserControla столкнулся с проблемой: Создал свой UserControl и...

Магическое, ненормальное поведение про простом обращении к свойству UserControl в примитивной программе. Чудеса!
Приветствую! Ситуация: есть два solutions: собственный контрол: CustomMenuStrip, он создан...

11
138 / 137 / 42
Регистрация: 26.10.2012
Сообщений: 443
30.01.2018, 14:58 2
Konradvall, сделайте свой элемент управления, переопределив в нем несколько методов:
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 MyControl : UserControl
    {
        public MyControl()
        {
            InitializeComponent();
        }
         //При нажатии кнопки мышки
        protected override void OnMouseDown(MouseEventArgs e)
        {
            BackColor = Color.Green;
            base.OnMouseDown(e);
        }
        //При отпускании кнопки мыши
        protected override void OnMouseUp(MouseEventArgs e)
        {
            BackColor = Color.Black;
            base.OnMouseUp(e);
        }
        //При наведении мыши на элемент управления
        protected override void OnMouseEnter(EventArgs e)
        {
            BackColor = Color.DarkGray;
            base.OnMouseEnter(e);
        }
        //При уходе мыши с элемента управления
        protected override void OnMouseLeave(EventArgs e)
        {
            BackColor = Color.Black;
            base.OnMouseLeave(e);
        }
    }
Это самый простой вариант. Пробуйте, экспериментируйте.
0
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141
30.01.2018, 15:44  [ТС] 3
Цитата Сообщение от Павлик Морозов Посмотреть сообщение
Это самый простой вариант. Пробуйте, экспериментируйте.
В принципе я так и реализовывал, только с одним но - я так и не разобрался как мне реализовать что бы цвет выбраного контрола был синим цветом и оставался таковым пока не будет выбран другой контрол, при этом при наведении на выбранный контрол его цвет не меняется на darkgrey
0
138 / 137 / 42
Регистрация: 26.10.2012
Сообщений: 443
30.01.2018, 16:08 4
Konradvall, попробуйте такие реализации:
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 MyControl : UserControl
    {
        public MyControl()
        {
            InitializeComponent();
        }
         //При нажатии кнопки мышки
        protected override void OnMouseDown(MouseEventArgs e)
        {
            BackColor = Color.Green;
            base.OnMouseDown(e);
        }
        //При потере фокуса элементом управления
        protected override void OnLostFocus(EventArgs e)
        {
            BackColor = Color.Black;
            base.OnLostFocus(e);
        }
        //При наведении мыши на элемент управления
        protected override void OnEnter(EventArgs e)
        {
            BackColor = Color.DarkGray;
            base.OnEnter(e);
        }
        //При уходе мыши с элемента управления
        protected override void OnMouseLeave(EventArgs e)
        {
            BackColor = Color.Black;
            base.OnMouseLeave(e);
        }
    }
Суть в том, что бы заменить метод обработки отпуска кнопки мыши на потерю фокуса элементом управления
0
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141
30.01.2018, 16:17  [ТС] 5
Цитата Сообщение от Павлик Морозов Посмотреть сообщение
Суть в том, что бы заменить метод обработки отпуска кнопки мыши на потерю фокуса элементом управления
функцианальность не изменилась по сравнению с предыдущим вариантом, все осталось на прежнем уровне

Добавлено через 28 секунд
прошу прощения если туплю конкретно
0
138 / 137 / 42
Регистрация: 26.10.2012
Сообщений: 443
31.01.2018, 09:54 6
Konradvall, покажите свой код. Так будет проще, нежели гадать на кофейной гуще. Интересует код элемента управления
0
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141
31.01.2018, 10:03  [ТС] 7
Павлик Морозов, я уже начал писать код с нуля поэтому пока его как такового нет, на днях думаю смогу его прикрепить, единственное что хотелось бы сказать что он не особо отличался от твоего с той лишь разницей что после я пытался экспериментировать с if else но передать состояние color так и не получилось, что бы выбранный контрол был синего цвета пока не будет выбран другой контро, который в свою очередб станет синим, а первый станет черного цвета.
0
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
01.02.2018, 01:41 8
Konradvall, так напиши хоть что-нибудь, будет с чем работать...
0
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141
01.02.2018, 14:48  [ТС] 9
после создания контрола, унаследовал его от radiobutton так как там имеется функция checked, но даже при этом результат отвратительный

Добавлено через 45 минут
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
 
namespace ARMMonitorCS
{
    public partial class ButtonCustMenu : RadioButton   
    {
        
        
 
        public ButtonCustMenu()
        {
            InitializeComponent();
            FlatStyle = FlatStyle.Flat;
            Appearance = Appearance.Button;
            BackColor = Color.FromArgb(45, 45, 48);
            FlatAppearance.BorderSize = 0;
            
        }
 
        
 
 
        private void ButtonCustMenu_Click(object sender, EventArgs e)
        {
            if (Checked == true)
            {
                BackColor = Color.FromArgb(253, 120, 45);
            }
 
            else
            {
                BackColor = Color.FromArgb(45, 45, 48);
            }
        }
 
        private void ButtonCustMenu_MouseHover(object sender, EventArgs e)
        {
            if (Checked == true)
            {
                BackColor = Color.FromArgb(253, 120, 45);
            }
 
            else
            {
                BackColor = Color.FromArgb(158, 158, 158);
            }
        }
 
        protected override void OnMouseLeave(EventArgs e)
        {
            if (Checked == true)
            {
                BackColor = Color.FromArgb(253, 120, 45);
                
            }
 
            else
            {
                BackColor = Color.FromArgb(45, 45, 48);
 
            }
        }
 
       
    }
}
0
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
01.02.2018, 16:45 10
Если правильно понял что вам нужно тогда смотрите логику реализации во вложении. Вам нужно вынести всё в отдельный метод, сделать запоминание предыдущего нажатого контрола. Чтоб можно было менять его цвет на дефолтный после нажатия на следующий контрол.
Вложения
Тип файла: 7z WindowsFormsApp2.7z (124.4 Кб, 3 просмотров)
0
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
01.02.2018, 17:36 11
Лучший ответ Сообщение было отмечено Konradvall как решение

Решение

Крч сам предложил , сам же и реализовал)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
namespace WindowsFormsApp2
{
 
    public partial class Form1 : Form
    {
        ChangeColor col = new ChangeColor();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            col.CMove(sender);
        }
 
        private void button1_MouseLeave(object sender, EventArgs e)
        {
            col.CLeave(sender);
        }
 
        private void button2_MouseLeave(object sender, EventArgs e)
        {
            col.CLeave(sender);
        }
 
        private void button2_MouseMove(object sender, MouseEventArgs e)
        {
            col.CMove(sender);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            col.CClick(sender);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            col.CClick(sender);
        }
    }
 
    public class ChangeColor
    {
        private Color _leave = Color.Gainsboro;
        private Color _move = Color.Lime;
        private Color _click = Color.Blue;
 
        //предыдущая кнопка
        private Button LastButton { get; set; } = null;
 
        //Текущая кнопка
        private Button NewButton { get; set; } = null;
 
        public void CMove(Object sender)
        {
            if (!isButton(sender))
            {
                return;
            }
            if (LastButton != sender as Button)
            {
                NewButton.BackColor = _move;
            }
        }
 
        public void CLeave(Object sender)
        {
            if (!isButton(sender))
            {
                return;
            }
            if (LastButton != sender as Button) {
                NewButton.BackColor = _leave;
            }
        }
 
        public void CClick(Object sender)
        {
            if (!isButton(sender))
            {
                return;
            }
            if (LastButton != null)
            {
                LastButton.BackColor = _leave;
            }
            LastButton = sender as Button;
            NewButton.BackColor = _click;
        }
 
        private bool isButton(Object sender)
        {
            //если контролл не кнопка
            if (sender.GetType() != typeof(Button))
            {
                return false;
            }
 
            NewButton = sender as Button;
            return true;
        }
    }
}
Вложения
Тип файла: 7z WindowsFormsApp2.7z (127.1 Кб, 4 просмотров)
1
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
01.02.2018, 17:45 12
Цитата Сообщение от Павлик Морозов Посмотреть сообщение
Это самый простой вариант.
Осталось только придумать как убрать цвет с предыдущего контрола
0
01.02.2018, 17:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2018, 17:45
Помогаю со студенческими работами здесь

Как разместить UserControl поверх другого UserControl
Такая задача. Есть форма. На ней размещена панель panelRight. Также есть два пользовательских...

Button, изменить поведение, не перегружая класс Button
<asp:Button .../> рендерится как: <input type="submit" .../> Вопрос, можно ли изменить это...

Удалить TabItems по клику на Button через UserControl
Здравствуйте уважаемые знатоки, нужна помощь в маленьком деле. Никак не могу реализовать удаление...

Если Button 1 и Button 2 нажаты - Button 3 стала активной, как?
Проверка если Button 1 и Button 2 нажаты - Button 3 стала активной Причем нужно чтобы это...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru