Динамически генерировать Combobox, Textbox, NumericUpDownC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Динамически генерировать Combobox, Textbox, NumericUpDown

Сообщение Anonymous »

Я создал форму в .NET 8/C#/Winforms, но застрял в реализации.
Моя форма выглядит так:
Изображение

Мне нужно иметь возможность добавлять/удалять с помощью зеленая и красная кнопки линия продукции с партией, номер партии от, номер партии до.
После добавления линии продуктов я могу с помощью синих кнопок создать другие новые строки для: партии, номера партии от, номера партии до.
Ряд продукта (поле со списком продуктов) может иметь несколько «пакетных» строк (текстовое поле, numericupdownfrom, numericupdownto).
Я также могу иметь несколько линеек продуктов.
Я нашел это статья: ссылка (понимаю как это работает), но не знаю как правильно, без ошибок реализовать?
Результат своей работы добавил по ссылке ниже.< /p>
Примечание: "Производство" - это группа, внутри группы "Номер производства", "Дата" и панель (куда добавляются сгенерированные элементы управления - я добавил панель для автопрокрутки) .
Вот что я пробовал, но это очень ошибка:
EXE
Исходный код
Код:
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 WindowsFormsApp2
{
public partial class Form1 : Form
{
private string selectedID = "";
private string selectedIndex = "";

private ComboBox[] productCbx = null;
private Button[] productAddBtn = null;
private Button[] productDeleteBtn = null;
private TextBox[] batchTxt = null;
private NumericUpDown[] batchFromNud = null;
private NumericUpDown[] batchToNud = null;
private Button[] batchAddBtn = null;
private Button[] batchDeleteBtn = null;

private int count = -1;
private int batchcount = -1;
private int max_row = 999;
private int empty_count = 0;
private int rowIndex = 0;
private int height = 80;

public Form1()
{
InitializeComponent();
InitializeArrays();
}

private void InitializeArrays()
{
productCbx = new ComboBox[max_row];
productAddBtn = new Button[max_row];
productDeleteBtn = new Button[max_row];
batchTxt = new TextBox[max_row];
batchFromNud = new NumericUpDown[max_row];
batchToNud = new NumericUpDown[max_row];
batchAddBtn = new Button[max_row];
batchDeleteBtn = new Button[max_row];
}

private void AddProductRow()
{
count++;
batchcount++;
height = height + 50;

//product cbx
productCbx[count] = new ComboBox();
productCbx[count].FormattingEnabled = true;
productCbx[count].Location = new System.Drawing.Point(14, height + 6);
productCbx[count].Name = "produscbx_" + count;
productCbx[count].Size = new System.Drawing.Size(193, 21);
productCbx[count].TabIndex = 9;
panel1.Controls.Add(productCbx[count]);

//product add btn
productAddBtn[count] = new Button();
productAddBtn[count].BackColor = System.Drawing.Color.Transparent;
productAddBtn[count].BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
productAddBtn[count].FlatAppearance.BorderSize = 0;
productAddBtn[count].FlatStyle = System.Windows.Forms.FlatStyle.Flat;
productAddBtn[count].Image = ((System.Drawing.Image)Properties.Resources.add);
productAddBtn[count].Location = new System.Drawing.Point(222, height);
productAddBtn[count].Name = "addprodbtn_" + count;
productAddBtn[count].Tag = count;
productAddBtn[count].Size = new System.Drawing.Size(33, 33);
productAddBtn[count].TabIndex = 44;
productAddBtn[count].UseVisualStyleBackColor = false;
productAddBtn[count].Click += new System.EventHandler(DispositionAdd_Click);
panel1.Controls.Add(productAddBtn[count]);

//product delete btn
productDeleteBtn[count] = new Button();
productDeleteBtn[count].BackColor = System.Drawing.Color.Transparent;
productDeleteBtn[count].BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
productDeleteBtn[count].FlatAppearance.BorderSize = 0;
productDeleteBtn[count].FlatStyle = System.Windows.Forms.FlatStyle.Flat;
productDeleteBtn[count].Image = ((System.Drawing.Image)Properties.Resources.delete);
productDeleteBtn[count].Location = new System.Drawing.Point(261, height);
productDeleteBtn[count].Name = "deleteprodbtn_" + count;
productDeleteBtn[count].Tag = count;
productDeleteBtn[count].Size = new System.Drawing.Size(33, 33);
productDeleteBtn[count].TabIndex = 45;
productDeleteBtn[count].UseVisualStyleBackColor = false;
productDeleteBtn[count].Click += new System.EventHandler(DispositionRemove_Click);
panel1.Controls.Add(productDeleteBtn[count]);

//batch textbox
batchTxt[count] = new TextBox();
batchTxt[count].Location = new System.Drawing.Point(306, height + 6);
batchTxt[count].Name = "batchtxt_" + count + "_" + batchcount;
batchTxt[count].Size = new System.Drawing.Size(127, 20);
batchTxt[count].Tag = batchcount;
batchTxt[count].TabIndex = 12;
panel1.Controls.Add(batchTxt[count]);

//batch number from
batchFromNud[count] = new NumericUpDown();
batchFromNud[count].Location = new System.Drawing.Point(447, height + 6);
batchFromNud[count].Maximum = new decimal(new int[] { 99999999, 0, 0, 0 });
batchFromNud[count].Minimum = new decimal(new int[] { 1, 0, 0, 0 });
batchFromNud[count].Name = "batchnrfromtxt_" + count + "_" + batchcount;
batchFromNud[count].Size = new System.Drawing.Size(104, 20);
batchFromNud[count].Tag = batchcount;
batchFromNud[count].TabIndex = 15;
batchFromNud[count].Value = new decimal(new int[] { 1, 0, 0, 0 });
panel1.Controls.Add(batchFromNud[count]);

//batch number to
batchToNud[count] = new NumericUpDown();
batchToNud[count].Location = new System.Drawing.Point(573, height + 6);
batchToNud[count].Maximum = new decimal(new int[] { 99999999, 0, 0, 0 });
batchToNud[count].Minimum = new decimal(new int[] { 1, 0, 0, 0 });
batchToNud[count].Name = "batchnrtotxt_" + count + "_" + batchcount;
batchToNud[count].Size = new System.Drawing.Size(104, 20);
batchToNud[count].Tag = batchcount;
batchToNud[count].TabIndex = 16;
batchToNud[count].Value = new decimal(new int[] { 1, 0, 0, 0 });
panel1.Controls.Add(batchToNud[count]);

//batch add
batchAddBtn[count] = new Button();
batchAddBtn[count].BackColor = System.Drawing.Color.Transparent;
batchAddBtn[count].FlatAppearance.BorderSize = 0;
batchAddBtn[count].FlatStyle = System.Windows.Forms.FlatStyle.Flat;
batchAddBtn[count].Image = Properties.Resources.toggle_expand;
batchAddBtn[count].Location = new System.Drawing.Point(692, height);
batchAddBtn[count].Name = "addbatch_" + count + "_" + batchcount;
batchAddBtn[count].Size = new System.Drawing.Size(33, 33);
batchAddBtn[count].Tag = batchcount;
batchAddBtn[count].TabIndex = 17;
batchAddBtn[count].UseVisualStyleBackColor = false;
batchAddBtn[count].Click += BatchAdd_Click;
panel1.Controls.Add(batchAddBtn[count]);

//batch delete
batchDeleteBtn[count] = new Button();
batchDeleteBtn[count].BackColor = System.Drawing.Color.Transparent;
batchDeleteBtn[count].FlatAppearance.BorderSize = 0;
batchDeleteBtn[count].FlatStyle = System.Windows.Forms.FlatStyle.Flat;
batchDeleteBtn[count].Image = Properties.Resources.toggle;
batchDeleteBtn[count].Location = new System.Drawing.Point(731, height);
batchDeleteBtn[count].Name = "deletebatch_" + count + "_" + batchcount;
batchDeleteBtn[count].Size = new System.Drawing.Size(33, 33);
batchDeleteBtn[count].Tag = batchcount;
batchDeleteBtn[count].TabIndex = 48;
batchDeleteBtn[count].UseVisualStyleBackColor = false;
//batchDeleteBtn[count].Visible = false;
batchAddBtn[count].Click += BatchDelete_Click;
panel1.Controls.Add(batchDeleteBtn[count]);
}

private void AddBatchRow()
{
count++;
batchcount++;

height = height + 50;

//batch textbox
batchTxt[count] = new TextBox();
batchTxt[count].Location = new System.Drawing.Point(306, height + 6);
batchTxt[count].Name = "batchtxt_" + count + "_" + batchcount;
batchTxt[count].Size = new System.Drawing.Size(127, 20);
batchTxt[count].Tag = batchcount;
batchTxt[count].TabIndex = 12;
panel1.Controls.Add(batchTxt[count]);

//batch number from
batchFromNud[count] = new NumericUpDown();
batchFromNud[count].Location = new System.Drawing.Point(447, height + 6);
batchFromNud[count].Maximum = new decimal(new int[] { 99999999, 0, 0, 0 });
batchFromNud[count].Minimum = new decimal(new int[] { 1, 0, 0, 0 });
batchFromNud[count].Name = "batchnrfromtxt_" + count + "_" + batchcount;
batchFromNud[count].Size = new System.Drawing.Size(104, 20);
batchFromNud[count].Tag = batchcount;
batchFromNud[count].TabIndex = 15;
batchFromNud[count].Value = new decimal(new int[] { 1, 0, 0, 0 });
panel1.Controls.Add(batchFromNud[count]);

//batch number to
batchToNud[count] = new NumericUpDown();
batchToNud[count].Location = new System.Drawing.Point(573, height + 6);
batchToNud[count].Maximum = new decimal(new int[] { 99999999, 0, 0, 0 });
batchToNud[count].Minimum = new decimal(new int[] { 1, 0, 0, 0 });
batchToNud[count].Name = "batchnrtotxt_" + count + "_" + batchcount;
batchToNud[count].Size = new System.Drawing.Size(104, 20);
batchToNud[count].Tag = batchcount;
batchToNud[count].TabIndex = 16;
batchToNud[count].Value = new decimal(new int[] { 1, 0, 0, 0 });
panel1.Controls.Add(batchToNud[count]);

//batch add
batchAddBtn[count] = new Button();
batchAddBtn[count].BackColor = System.Drawing.Color.Transparent;
batchAddBtn[count].FlatAppearance.BorderSize = 0;
batchAddBtn[count].FlatStyle = System.Windows.Forms.FlatStyle.Flat;
batchAddBtn[count].Image = Properties.Resources.toggle_expand;
batchAddBtn[count].Location = new System.Drawing.Point(692, height);
batchAddBtn[count].Name = "addbatch_" + count + "_" + batchcount;
batchAddBtn[count].Size = new System.Drawing.Size(33, 33);
batchAddBtn[count].Tag = batchcount;
batchAddBtn[count].TabIndex = 17;
batchAddBtn[count].UseVisualStyleBackColor = false;
batchAddBtn[count].Click += BatchAdd_Click;
panel1.Controls.Add(batchAddBtn[count]);

//batch delete
batchDeleteBtn[count] = new Button();
batchDeleteBtn[count].BackColor = System.Drawing.Color.Transparent;
batchDeleteBtn[count].FlatAppearance.BorderSize = 0;
batchDeleteBtn[count].FlatStyle = System.Windows.Forms.FlatStyle.Flat;
batchDeleteBtn[count].Image = Properties.Resources.toggle;
batchDeleteBtn[count].Location = new System.Drawing.Point(731, height);
batchDeleteBtn[count].Name = "deletebatch_" + count + "_" + batchcount;
batchDeleteBtn[count].Size = new System.Drawing.Size(33, 33);
batchDeleteBtn[count].Tag = batchcount;
batchDeleteBtn[count].TabIndex = 48;
batchDeleteBtn[count].UseVisualStyleBackColor = false;
batchAddBtn[count].Click += BatchDelete_Click;
panel1.Controls.Add(batchDeleteBtn[count]);
}

private void RemoveProductRow(int index)
{
if (count > -1)
{
panel1.Controls.Remove(productCbx[index]);
panel1.Controls.Remove(productAddBtn[index]);
panel1.Controls.Remove(productDeleteBtn[index]);
panel1.Controls.Remove(batchTxt[index]);
panel1.Controls.Remove(batchFromNud[index]);
panel1.Controls.Remove(batchToNud[index]);
panel1.Controls.Remove(batchAddBtn[index]);
panel1.Controls.Remove(batchDeleteBtn[index]);
count--;
}
}

private void RemoveBatchRow(int index)
{
if (batchcount > -1)
{
panel1.Controls.Remove(batchTxt[index]);
panel1.Controls.Remove(batchFromNud[index]);
panel1.Controls.Remove(batchToNud[index]);
panel1.Controls.Remove(batchAddBtn[index]);
panel1.Controls.Remove(batchDeleteBtn[index]);
batchcount--;
}
}

private void DispositionAdd_Click(object sender, EventArgs e)
{
AddProductRow();
}

private void DispositionRemove_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
int index = Convert.ToInt32(btn.Tag.ToString());
RemoveProductRow(index);
}

private void BatchDelete_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
int index = Convert.ToInt32(btn.Tag.ToString());
RemoveBatchRow(index);
}

private void BatchAdd_Click(object sender, EventArgs e)
{
AddBatchRow();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ericupdown
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Динамически генерировать Combobox, Textbox, NumericUpDown
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Добавление кнопки в ComboBox и изменение размера внутреннего элемента управления TextBox.
    Anonymous » » в форуме C#
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Добавление кнопки в ComboBox и изменение размера внутреннего элемента управления TextBox.
    Anonymous » » в форуме C#
    0 Ответы
    58 Просмотры
    Последнее сообщение Anonymous
  • Добавление кнопки в ComboBox и изменение размера внутреннего элемента управления TextBox.
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Получить элемент управления TextBox из ComboBox
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»