Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
5 / 5 / 3
Регистрация: 04.01.2016
Сообщений: 99

Создать класс Buttons

05.02.2017, 20:26. Показов 3110. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
требуется создать класс, (скорее всего это делается через наследование, но я не понимаю как)
в классе должны быть описаны параметры кнопки, а так же массив, содержащий указанное количество кнопок
я сломал всю голову. видимо точно не понимаю как это делается.
кто-то может разъяснить, как это делается?
может быть кто-то кинет ссылку на нужный ресурс...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public class Buttons
    {
        Button button;
        List<Button> buttons = new List<Button>();
        public ButtonOfMenuProgress(int xLocation, int yLocation, int countButtons)
        {
            for (int i = 0; i < countButtons - 1; i++)
            {
                button = new Button();
                this.button.Location = new System.Drawing.Point(xLocation+10, yLocation);
                this.button.Size = new System.Drawing.Size(38, 13);
                this.button.Text = "";
                this.button.UseVisualStyleBackColor = true;
                buttons.Add(button);
            }
 
        }
    }
я понимаю, что мой код это полная ерунда. Но хотя бы направьте в нужное русло
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.02.2017, 20:26
Ответы с готовыми решениями:

Программно создать Buttons и Popover
Здравствуйте, скажите пожалуйста как по нажатию на программно-созданные кнопки показывать один и тот же поповер, но с разным содержимым?...

Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо
Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо. Дополнительно есть марка,...

Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ...
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы задания имени, возраста и веса. Создать производный класс...

8
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
05.02.2017, 20:39
Скорее всего Вам от UserControl наследовать нужно. Если у требуется жестко заданное число кнопок то все делаем внутри класса.

C#
1
2
3
4
5
6
7
8
9
public partial class UserControlButtons : UserControl
{
    List<Button> Buttons { set; get; }
 
    public UserControlButtons(List<Button> buttons)
    {
        InitializeComponent();
    }
}

Что бы ответить конкретнее - нужно знать чего Вы хотите добитъся.
1
5 / 5 / 3
Регистрация: 04.01.2016
Сообщений: 99
05.02.2017, 20:41  [ТС]
спасибо. сейчас буду разбираться.
Цитата Сообщение от Sanya_sa Посмотреть сообщение
чего Вы хотите добитъся.
я хочу создать класс "меню кнопок". чтобы при создании объекта класса появлялись например 5 одинаковых кнопок в ряд
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
05.02.2017, 20:58
Цитата Сообщение от cancoder Посмотреть сообщение
я хочу создать класс "меню кнопок". чтобы при создании объекта класса появлялись например 5 одинаковых кнопок в ряд
Создавайте проект типа "библиотека классов", в ней класс например MenuCast, наследник от UserControl. И будет Вам счастье)

Вот Вам пример (может не самый удачный):

// Само меню
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
130
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace UAVMenu
{
    public partial class UserControlMenu : UserControl
    {
        # region Переменные
 
        //
        private List<MenuItem> MenuItems = new List<MenuItem>();
 
        //
        private const int Between = 2;
 
        //
        private Timer ShowMane = new Timer();
 
        //
        private int CurentW = 0;
 
        //
        private const int StepOpen = 60;
 
        # endregion
 
 
        # region Переменные
 
        public event EventHandler<IDmsg> SendMsg;
 
        # endregion
 
        //
        public UserControlMenu()
        {
            InitializeComponent();
 
            MenuItems.Add(new MenuItem(Res.Menu));
            MenuItems.Add(new MenuItem(Res.State));
            MenuItems.Add(new MenuItem(Res.Routs));
            MenuItems.Add(new MenuItem(Res.Horizon));
            MenuItems.Add(new MenuItem(Res.Cam));
            MenuItems.Add(new MenuItem(Res.Control));
            MenuItems.Add(new MenuItem(Res.Log));
            MenuItems.Add(new MenuItem(Res.Settings));
            MenuItems.Add(new MenuItem(Res.Help));
 
            for (int i = 0; i < MenuItems.Count; i++)
            {
                var  it = MenuItems[i];
                var tmp = i * (it.Img.Width + Between) == 0 ? 1 : i * (it.Img.Width + Between);
                it.Position = new Point(tmp, 1);
            }
 
            CurentW = MenuItems[0].State ? (MenuItems[0].Img.Size.Width + Between) * MenuItems.Count + Between : MenuItems[0].Img.Size.Width + 2 * Between;
            Width = CurentW;
 
            ShowMane.Interval = 5;
            ShowMane.Enabled = false;
            ShowMane.Tick += (o, e) => 
            {
                if (Width > CurentW) { Width -= StepOpen; }
                else if (Width < CurentW) { Width += StepOpen; }
 
                if (Width <= MenuItems[0].Img.Size.Width + 2 * Between && !MenuItems[0].State) 
                { 
                    ShowMane.Enabled = false;
                    Width = MenuItems[0].Img.Size.Width + 2 * Between;
                }
                if (Width >= (MenuItems[0].Img.Size.Width + Between) * MenuItems.Count + Between && MenuItems[0].State) 
                { 
                    ShowMane.Enabled = false;
                    Width = (MenuItems[0].Img.Size.Width + Between) * MenuItems.Count + Between;
                }
            };
        }
 
        //
        private void UserControlMenu_MouseDown(object sender, MouseEventArgs e)
        {
            if (MenuItems[0].Position.X < e.X && MenuItems[0].Position.X + MenuItems[0].Img.Width > e.X)
            {
                MenuItems[0].State = !MenuItems[0].State;
                CurentW = MenuItems[0].State ? (MenuItems[0].Img.Size.Width + Between) * MenuItems.Count + Between : MenuItems[0].Img.Size.Width + 2 * Between;
                ShowMane.Enabled = true;
                return;
            }
 
            for (int i = 1; i < MenuItems.Count; i++)
            {
                var it = MenuItems[i];
                
                if (it.Position.X < e.X && it.Position.X + it.Img.Width > e.X)
                {
                    it.State = !it.State;
                    if (SendMsg != null) { SendMsg(this, new IDmsg(i, it.State)); }
                    break;
                }
            }
 
            Invalidate();
        }
 
        //
        private void UserControlMenu_MouseUp(object sender, MouseEventArgs e)
        {
            Invalidate();
        }
 
        //
        private void UserControlMenu_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Invalidate();
        }
 
        // Перерисовка
        protected override void OnPaint(PaintEventArgs e)
        {
            for (int i = 0; i < MenuItems.Count; i++) { MenuItems[i].Draw(e.Graphics); }
        }
    }
}

// Элемент меню (кнопка можно сказать)
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
 
namespace UAVMenu
{
    public class MenuItem
    {
        # region Свойства
 
        private Color OnColor;
        private bool _State;
 
        # endregion
 
 
        # region Свойства
 
        /// <summary>
        /// Картинка элемента
        /// </summary>
        public Image Img { private set; get; }
 
        /// <summary>
        /// Положение
        /// </summary>
        public Point Position { set; get; }
 
        /// <summary>
        /// Состояние
        /// </summary>
        public bool State 
        { 
            set
            {
                _State = value;
                OnColor = _State ? Color.FromArgb(100, 0, 230, 0) : Color.FromArgb(100, 0, 0, 0);
            }
            get { return _State; }
        }
 
        # endregion
 
 
        # region Методы
 
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="img">Картинка элемента</param>
        public MenuItem(Image img)
        {
            Img = img;
            Position = new Point();
            State = false;
        }
 
        /// <summary>
        /// Отрисовка элемента
        /// </summary>
        /// <param name="g"></param>
        public void Draw(Graphics g)
        {
            using (var brs = new SolidBrush(OnColor)) { g.FillRectangle(brs, new Rectangle(Position, Img.Size)); }
            g.DrawImage(Img, Position);
        }
 
        # endregion
    }
}
Вот так примерно выглядит
Миниатюры
Создать класс Buttons  
1
5 / 5 / 3
Регистрация: 04.01.2016
Сообщений: 99
05.02.2017, 21:11  [ТС]
эх... это слишком сложно для меня
мне бы пример, чтоб принцип понять.
спасибо за проделанную работу.
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
05.02.2017, 21:31
Ну вот как то так:
Изображения
 
Вложения
Тип файла: 7z UCbuttons.7z (32.3 Кб, 14 просмотров)
1
5 / 5 / 3
Регистрация: 04.01.2016
Сообщений: 99
05.02.2017, 21:48  [ТС]
Большое спасибо!
0
2 / 2 / 0
Регистрация: 23.12.2016
Сообщений: 80
06.02.2017, 12:30
Я так понимаю вы хотите создать класс для редактирования кнопок?
То есть вы хотите настроить форму кнопки, цвет, и так далее.

ну например так?

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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Windows.Forms;
 
 
class Button : ThemeContainer152
{
 
    public Button()
    {
        MoveHeight = 24;
        BackColor = Color.FromArgb(35, 35, 35);
        TransparencyKey = Color.Fuchsia;
 
        SetColor("Sides", 40, 40, 40);
        SetColor("Gradient", 18, 18, 18);
        SetColor("Text", 10, 0, 200);
        SetColor("Border1", 40, 40, 40);
        SetColor("Border2", 22, 22, 22);
        SetColor("Border3", 65, 65, 65);
        SetColor("Border4", Color.Black);
        SetColor("Hatch1", 39, 39, 39);
        SetColor("Hatch2", 35, 35, 35);
        SetColor("Hatch3", 29, 29, 29);
        SetColor("Hatch4", 26, 26, 26);
        SetColor("Shade1", 50, 7, 7, 7);
        SetColor("Shade2", Color.Transparent);
    }
 
    private Color C1;
    private Color C2;
    private SolidBrush B1;
    private Pen P1;
    private Pen P2;
    private Pen P3;
 
    private Pen P4;
    protected override void ColorHook()
    {
        C1 = GetColor("Sides");
        C2 = GetColor("Gradient");
 
        B1 = new SolidBrush(GetColor("Text"));
 
        P1 = new Pen(GetColor("Border1"));
        P2 = new Pen(GetColor("Border2"));
        P3 = new Pen(GetColor("Border3"));
        P4 = new Pen(GetColor("Border4"));
 
        CreateTile();
        CreateShade();
 
        BackColor = GetColor("Hatch2");
    }
 
 
    private Rectangle RT1;
    protected override void PaintHook()
    {
        G.Clear(C1);
 
        DrawGradient(C2, C1, 0, 0, Width, 24);
        DrawText(B1, HorizontalAlignment.Left, 8, 0);
 
        RT1 = new Rectangle(8, 24, Width - 16, Height - 32);
        G.FillRectangle(Tile, RT1);
 
        for (int I = 0; I <= Shade.Length - 1; I++)
        {
            DrawBorders(Shade[I], RT1, I);
        }
 
        RT1 = new Rectangle(8, 24, Width - 16, Height - 32);
        DrawBorders(P1, RT1, 1);
        DrawBorders(P2, RT1);
        DrawCorners(C1, RT1);
 
        DrawBorders(P3, 1);
        DrawBorders(P4);
 
        DrawCorners(TransparencyKey);
    }
 
 
    private TextureBrush Tile;
    private byte[] TileData = Convert.FromBase64String("AgIBAQEBAwMBAQEBAAABAQEBAQEBAgIBAQEBAwMBAQEBAAAB");
    private void CreateTile()
    {
        Bitmap TileImage = new Bitmap(6, 6);
        Color[] TileColors = new Color[] {
            GetColor("Hatch1"),
            GetColor("Hatch2"),
            GetColor("Hatch3"),
            GetColor("Hatch4")
        };
 
        for (int I = 0; I <= 35; I++)
        {
            TileImage.SetPixel(I % 6, I / 6, TileColors[TileData[I]]);
        }
 
        Tile = new TextureBrush(TileImage);
        TileImage.Dispose();
    }
 
    private Pen[] Shade;
    private void CreateShade()
    {
        if (Shade != null)
        {
            for (int I = 0; I <= Shade.Length - 1; I++)
            {
                Shade[I].Dispose();
            }
        }
 
        Bitmap ShadeImage = new Bitmap(1, 20);
        Graphics ShadeGraphics = Graphics.FromImage(ShadeImage);
 
        Rectangle ShadeBounds = new Rectangle(0, 0, 1, 20);
        LinearGradientBrush Gradient = new LinearGradientBrush(ShadeBounds, GetColor("Shade1"), GetColor("Shade2"), 90f);
 
        Shade = new Pen[20];
        ShadeGraphics.FillRectangle(Gradient, ShadeBounds);
 
        for (int I = 0; I <= Shade.Length - 1; I++)
        {
            Shade[I] = new Pen(ShadeImage.GetPixel(0, I));
        }
 
        Gradient.Dispose();
        ShadeGraphics.Dispose();
        ShadeImage.Dispose();
    }
 
}
 
class Button : ThemeControl152
{
 
    public Button()
    {
        SetColor("DownGradient1", 24, 24, 24);
        SetColor("DownGradient2", 38, 38, 38);
        SetColor("NoneGradient1", 38, 38, 38);
        SetColor("NoneGradient2", 24, 24, 24);
        SetColor("Text", 50, 88, 0);
        SetColor("Border1", 22, 22, 22);
        SetColor("Border2A", 60, 60, 60);
        SetColor("Border2B", 36, 36, 36);
    }
 
    private Color C1;
    private Color C2;
    private Color C3;
    private Color C4;
    private Color C5;
    private Color C6;
    private SolidBrush B1;
    private LinearGradientBrush B2;
    private Pen P1;
 
    private Pen P2;
    protected override void ColorHook()
    {
        C1 = GetColor("DownGradient1");
        C2 = GetColor("DownGradient2");
        C3 = GetColor("NoneGradient1");
        C4 = GetColor("NoneGradient2");
        C5 = GetColor("Border2A");
        C6 = GetColor("Border2B");
 
        B1 = new SolidBrush(GetColor("Text"));
 
        P1 = new Pen(GetColor("Border1"));
    }
 
    protected override void PaintHook()
    {
        if (State == MouseState.Down)
        {
            DrawGradient(C1, C2, ClientRectangle, 90f);
        }
        else
        {
            DrawGradient(C3, C4, ClientRectangle, 90f);
        }
 
        DrawText(B1, HorizontalAlignment.Center, 0, 0);
 
        B2 = new LinearGradientBrush(ClientRectangle, C5, C6, 90f);
        P2 = new Pen(B2);
 
        DrawBorders(P1);
        DrawBorders(P2, 1);
    }
}
Либо я тебя не так понял)
0
5 / 5 / 3
Регистрация: 04.01.2016
Сообщений: 99
06.02.2017, 13:50  [ТС]
спасибо большое за труды!
я вроде как решил головоломку целый день напрягал мозг
суть в том, что мне нужно сделать несколько однотипных кнопок подряд. допустим 5.
это будет 5 стадий задачи.
так сказать визуальное отображение статуса задачи пользователя.
допустим нажата 1 кнопка. она горит зелёным. остальные серые.
видно сразу что мало чего проделано по данной задаче.
если нажата 4 кнопка. то видно что осталось совсем чуть чуть поработать чтобы закончить дело.
такая менюшка на каждую задачу вешается.
у меня получилось. кое как но вроде работает.
осталось только продумать поведение кнопок. чтобы всё грамотно загоралось зелёным и гасло в случае необходимости.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2017, 13:50
Помогаю со студенческими работами здесь

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

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

Создать абстрактный класс «Товар», на его основе создать класс «Автомобиль»
Вечер добрый, а может и не добрый. В изучении C# столкнулся с такой проблемой - как исключения. Имею такую задачу. Создать абстрактный...

Создать класс - данные - абстрактный базовый класс. Создать производные классы
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа...

Создать класс Point, на его основе создать класс Line
Здравствуйте, есть такая часть задачки: &quot;Создать класс Point, на его основе создать класс Line. В классах описать следующие элементы: ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru