Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/259: Рейтинг темы: голосов - 259, средняя оценка - 4.61
36 / 32 / 23
Регистрация: 28.12.2015
Сообщений: 264
1

Закругленный Button

08.12.2016, 21:57. Показов 50970. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На стэке есть такая же тема, но годного ответа нет.

Как сделать кнопку, как на скрине?
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2016, 21:57
Ответы с готовыми решениями:

При нажатии на Button каждый раз создается новый компонент (button/label/textbox)
Как реализовать?

Создание button без заднего фона, и подключение коротких звуков при нажатии button
Т.к. я только начинающий юзер C#, хотел бы спросить, если кто сможет подсказать, как убрать задний...

Блокировка Button без Button.Enabled = false
Задача: Заблокировать кнопку с именем MyBtn без использования: MyBtn.Enabled = false; ...

Написать триггер для Button, который запустит анимацию сдвига Button на 100 пикселей за 2 секунды
Пожалуйста, помогите. Написать триггер для Button, который запустит анимацию сдвига Button на 100...

9
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
08.12.2016, 21:59 2
Постарайся изменить этот код под себя
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void button2_Click(object sender, EventArgs e)
        {
            GraphicsPath gp = new GraphicsPath();
            Graphics g = CreateGraphics();
            // Создадим новый прямоугольник с размерами кнопки 
            Rectangle smallRectangle = button2.ClientRectangle;
            // уменьшим размеры прямоугольника 
            smallRectangle.Inflate(-3, -3);
            // создадим эллипс, используя полученные размеры 
            gp.AddEllipse(smallRectangle);
            button2.Region = new Region(gp);
            // рисуем окантовоку для круглой кнопки 
            g.DrawEllipse(new Pen(Color.Gray, 2),
            button2.Left + 1,
            button2.Top + 1,
            button2.Width - 3,
            button2.Height - 3);
            // освобождаем ресурсы 
            g.Dispose();
 
 
        }
1
36 / 32 / 23
Регистрация: 28.12.2015
Сообщений: 264
08.12.2016, 22:08  [ТС] 3
aleksskay4, как вариант, может быть кому-нибудь подойдет, спасибо, но дизайн, по-моему, просит доработки. И создавать каждый раз кнопки изменяю в ручную... может быть ещё есть какие-то варианты?
Изображения
 
0
3564 / 2505 / 1174
Регистрация: 14.08.2016
Сообщений: 8,213
08.12.2016, 22:13 4
использовать WPF
0
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
08.12.2016, 22:22 5
Цитата Сообщение от Fedor_Fedorov Посмотреть сообщение
И создавать каждый раз кнопки изменяю в ручную...
В WinForms вряд ли по другому получится.
0
36 / 32 / 23
Регистрация: 28.12.2015
Сообщений: 264
08.12.2016, 22:32  [ТС] 6
Diamante, а не подскажете как в WPF сделать как на скрине?
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
08.12.2016, 23:35 7
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
public class RoundedButton : Button
{
    [Category("Appearance"), Description("Цвет границы")]
    public Color BorderColor { get; set; }
    [Category("Appearance"), Description("Ширина границы")]
    public float BorderWidth { get; set; }
 
    public RoundedButton()
    {
        BorderColor = DefaultBackColor;
        BorderWidth = 6f;
    }
    #region Overrides of Control
 
    protected override void OnPaint(PaintEventArgs pevent)
    {
        using (var gp = new GraphicsPath())
        {
            RectangleF rf = new RectangleF(new PointF(0, 0), new SizeF(Height, Height));
            gp.AddArc(rf, 90, 180);
            gp.AddLine(new PointF(Height / 2f, 0), new PointF(Width - Height / 2f, 0));
            rf.Offset(Width - Height, 0);
            gp.AddArc(rf, -90, 180);
            gp.CloseAllFigures();
            Region = new Region(gp);
            base.OnPaint(pevent);
            using (var pen = new Pen(BorderColor, BorderWidth))
            {
                pevent.Graphics.DrawPath(pen, gp);
            }
        }
    }
 
 
    #endregion
}
1
Эксперт .NETАвтор FAQ
10418 / 5148 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.12.2016, 01:09 8
ViterAlex,
В серьезное приложение такое вставлять нельзя:
Название: Скриншот 2016-12-09 00.07.41.png
Просмотров: 2578

Размер: 12.2 Кб
2
Эксперт .NETАвтор FAQ
10418 / 5148 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.12.2016, 01:10 9
Лучший ответ Сообщение было отмечено EvilFromHell как решение

Решение

Закругленный Button
Кликните здесь для просмотра всего текста
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
    public class RoundButton : Control
    {
        public Color BackColor2 { get; set; }
        public Color ButtonBorderColor { get; set; }
        public int ButtonRoundRadius { get; set; }
 
        public Color ButtonHighlightColor { get; set; }
        public Color ButtonHighlightColor2 { get; set; }
        public Color ButtonHighlightForeColor { get; set; }
 
        public Color ButtonPressedColor { get; set; }
        public Color ButtonPressedColor2 { get; set; }
        public Color ButtonPressedForeColor { get; set; }
 
        private bool IsHighlighted;
        private bool IsPressed;
 
        public RoundButton()
        {
            Size = new Size(100, 40);
            ButtonRoundRadius = 30;
            BackColor = Color.Gainsboro;
            BackColor2 = Color.Silver;
            ButtonBorderColor = Color.Black;
            ButtonHighlightColor = Color.Orange;
            ButtonHighlightColor2 = Color.OrangeRed;
            ButtonHighlightForeColor = Color.Black;
 
            ButtonPressedColor = Color.Red;
            ButtonPressedColor2 = Color.Maroon;
            ButtonPressedForeColor = Color.White;
        }
 
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams createParams = base.CreateParams;
                createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
                return createParams;
            }
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
 
            var foreColor = IsPressed ? ButtonPressedForeColor : IsHighlighted ? ButtonHighlightForeColor : ForeColor;
            var backColor = IsPressed ? ButtonPressedColor : IsHighlighted ? ButtonHighlightColor : BackColor;
            var backColor2 = IsPressed ? ButtonPressedColor2 : IsHighlighted ? ButtonHighlightColor2 : BackColor2;
 
 
            using (var pen = new Pen(ButtonBorderColor, 1))
                e.Graphics.DrawPath(pen, Path);
 
            using (var brush = new LinearGradientBrush(ClientRectangle, backColor, backColor2, LinearGradientMode.Vertical))
                e.Graphics.FillPath(brush, Path);
 
            using (var brush = new SolidBrush(foreColor))
            {
                var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
                var rect = ClientRectangle;
                rect.Inflate(-4, -4);
                e.Graphics.DrawString(Text, Font, brush, rect, sf);
            }
 
            base.OnPaint(e);
        }
 
        protected override void OnPaintBackground(PaintEventArgs e)
        {
        }
 
        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);
            IsHighlighted = true;
            Parent.Invalidate(Bounds, false);
            Invalidate();
        }
 
        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            IsHighlighted = false;
            IsPressed = false;
            Parent.Invalidate(Bounds, false);
            Invalidate();
        }
 
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            Parent.Invalidate(Bounds, false);
            Invalidate();
            IsPressed = true;
        }
 
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            Parent.Invalidate(Bounds, false);
            Invalidate();
            IsPressed = false;
        }
 
        protected GraphicsPath Path 
        {
            get
            {
                var rect = ClientRectangle;
                rect.Inflate(-1, -1);
                return GetRoundedRectangle(rect, ButtonRoundRadius);
            }
        }
 
        public static GraphicsPath GetRoundedRectangle(Rectangle rect, int d)
        {
            var gp = new GraphicsPath();
 
            gp.AddArc(rect.X, rect.Y, d, d, 180, 90);
            gp.AddArc(rect.X + rect.Width - d, rect.Y, d, d, 270, 90);
            gp.AddArc(rect.X + rect.Width - d, rect.Y + rect.Height - d, d, d, 0, 90);
            gp.AddArc(rect.X, rect.Y + rect.Height - d, d, d, 90, 90);
            gp.CloseFigure();
 
            return gp;
        }
    }

Название: Скриншот 2016-12-09 00.02.17.png
Просмотров: 2793

Размер: 11.1 Кб
10
36 / 32 / 23
Регистрация: 28.12.2015
Сообщений: 264
09.12.2016, 11:25  [ТС] 10
Storm23, спасибо большое, это то, что нужно!
0
09.12.2016, 11:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2016, 11:25
Помогаю со студенческими работами здесь

закруглённый уголок
блок хедер. есть градиент от черного к серому общий. между центром и правым боком присутствует...

Закругленный ДИВ в хром и сафари
Вобщем, нужно закруглить див cssкой. без картинок или чего-то подобного просто кодом. просто код ...

Как сделать закругленный текст?
КАААк это верстать?2 часа парюсь

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


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

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