#c# #windows #forms #button #panel
#c# #Windows #формы #кнопка #панель
Вопрос:
Итак, в основном я использовал цикл foreach для добавления одинаковых элементов управления макетом. Теперь я хочу создать, например, простые и — функции. 2 Кнопки 1 текстовое поле с увеличением и уменьшением. Теперь я столкнулся с проблемой, как только я создаю эту функциональность, все поля получают одну и ту же информацию. Если я увеличу на панели 1 «количество» на другом, оно все равно будет соответствовать последнему количеству.
Мой вопрос был бы в том, как заставить его функционировать отдельно. Номер Int объявляется глобально.
Button plus = new Button();
plus.BackColor = System.Drawing.Color.White;
plus.FlatAppearance.BorderColor = System.Drawing.Color.White;
plus.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
plus.Font = new System.Drawing.Font("Arial Rounded MT Bold", 16.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
plus.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(175)))), ((int)(((byte)(241)))));
plus.Location = new System.Drawing.Point(96, 84);
plus.Name = number.ToString();
plus.Size = new System.Drawing.Size(30, 29);
plus.TabIndex = 15;
plus.Text = " ";
plus.UseVisualStyleBackColor = false;
Button minus = new Button();
minus.BackColor = System.Drawing.Color.White;
minus.FlatAppearance.BorderColor = System.Drawing.Color.White;
minus.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
minus.Font = new System.Drawing.Font("Arial Rounded MT Bold", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
minus.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(175)))), ((int)(((byte)(241)))));
minus.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
minus.Location = new System.Drawing.Point(130, 84);
minus.Name = number.ToString();
minus.Size = new System.Drawing.Size(30, 29);
minus.TabIndex = 16;
minus.Text = "-";
minus.UseVisualStyleBackColor = false;
TextBox t = new TextBox();
t.Location = new System.Drawing.Point(165, 84);
t.Multiline = true;
t.Name = number.ToString();
plus.Click = (sender, e) => plus_Click(sender, e,t);
minus.Click = (sender, e) => minus_Click(sender, e, t);
protected void plus_Click(object sender, EventArgs e, TextBox t)
{
Button plus = sender as Button;
count = 1;
t.Text = count.ToString();
}
protected void minus_Click(object sender, EventArgs e, TextBox t)
{
Button minus = sender as Button;
count -= 1;
if (count <= 0)
count = 0;
t.Text = count.ToString();
}
Комментарии:
1. Создайте пользовательский элемент управления, содержащий две кнопки и текстовое поле. Добавьте экземпляры этого пользовательского элемента управления в свои контейнеры (панели или что-то еще). Вы можете добавить общедоступное свойство в UC, которое возвращает текущее количество.
2. @Jimi Можешь уточнить? я новичок в этом мире, я пробовал гуглить, но это не очень помогло.
3. О чем вы гуглили? В любом случае, откройте меню проекта, выберите
Add UserControl...
, оно создаст конструктор для вашего пользовательского элемента управления (похожий на конструктор форм). Добавьте две кнопки и текстовое поле и выполняйте свои операции там. Добавьте общедоступное свойство в свой UC, которое возвращает текущееcount
значение для этого UC. Скомпилируйте. На панели инструментов выберите свой UC и добавьте столько копий, сколько вам нужно, в свою панель, Форму или другой контейнер. Вот и все. Если затем вы хотите узнать, каково текущее значение конкретного UC, прочитайте значение, возвращаемое добавленным вами общедоступным свойством.4. Но я добавляю элементы управления на панель вручную (программно). Это пустая панель перед запуском приложения.
5. Вы можете добавить свои пользовательские элементы управления вручную таким же образом.