Событие KeyDown и EditControlShowing для динамического создания сетки

В форме я поместил Tabcontrol без вкладок и объявить переменную для DataGridview и TabPage

private DataGridView[] rtb = new DataGridView[100];
private TabPage[] tab = new TabPage[100];

После этого я создаю функцию с именем пользователя Создать вкладки и Gridview со столбцами на основе ввода в текстовое поле Сколько пользователь хочет

public void ctp(Int32 textbox)
{
    try
    {
        if (textbox > 10)
        {
            MessageBox.Show("You Exceed Limit");
        }
        else
        {
            int k = 0;
            int s = 0;
            tabControl2.TabPages.Clear();
            k = Convert.ToInt32(textBox1.Text);
            for (int i = 0; i < k; i++)
            {
                tab[i] = new TabPage();
                //Start Gridview
                rtb[i] = new System.Windows.Forms.DataGridView();
                rtb[i].Location = new System.Drawing.Point(0, 50);
                rtb[i].Size = new System.Drawing.Size(1020, 150);
                //ID Column
                rtb[i].Columns.Add("tr_id", "ID");
                rtb[i].Columns["tr_id"].ReadOnly = true;
                rtb[i].Columns["tr_id"].Width = 1;
                // Color Column
                rtb[i].Columns.Add("color_no", "Pantone No.");
                //Quantity Column
                rtb[i].Columns.Add("quantity", "Quantity");
                //Piece Weight Column
                rtb[i].Columns.Add("piece_weight", "Piece Weight");
                //Total Weight Carton
                rtb[i].Columns.Add("total_weight", "Total Weight");
                //Piece in Carton Column
                rtb[i].Columns.Add("pcs_carton", "Pcs/Carton");
                //No Of Carton Column
                rtb[i].Columns.Add("no_of_carton", "Total Cartons");
                //Unit Name Column
                rtb[i].Columns.Add("unit_name", "Unit Name");
                //Rate Column
                rtb[i].Columns.Add("rate", "Rate");
                //Amount Column
                rtb[i].Columns.Add("amount", "Amount");
                //Ship Qty Column
                rtb[i].Columns.Add("ship_qty", "Ship Qty.");
                //kdnr column
                rtb[i].Columns.Add("kdnr", "KDNR");
                //reference No Column
                rtb[i].Columns.Add("ref_no", "Reference No.");

                DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
                checkColumn.Name = "deleterow";
                checkColumn.HeaderText = "Delete Row";
                checkColumn.Width = 50;
                checkColumn.ReadOnly = false;
                checkColumn.FillWeight = 10; //if the datagridview is resized (on form resize) the checkbox won't take up too much; value is relative to the other columns' fill values
                rtb[i].Columns.Add(checkColumn);

                tab[i].Controls.Add(rtb[i]);
                tab[i].Location = new System.Drawing.Point(4, 22);
                tab[i].Name = "tab" + i.ToString();
                tab[i].Padding = new System.Windows.Forms.Padding(3);
                tab[i].Size = new System.Drawing.Size(400, 242);
                tab[i].Text = "Article" + i.ToString();
                tab[i].UseVisualStyleBackColor = true;
                tabControl2.TabPages.Add(tab[i]);

                //MessageBox.Show(""+tab[i].Text);
            }

        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

После этого эта функция вызывает событие TextBox KeyDown

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
#region Calling Create TabPage Function
    try
    {
        if (e.KeyCode == Keys.Enter)
        {
            Int32 textbox = Convert.ToInt32(textBox1.Text);
            ctp(textbox);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
#endregion
}

Этот код прекрасно работает. Мой вопрос заключается в том, что когда у меня есть 2 gridview, которые будут создаваться пользователем динамически, то есть как получить доступ к событиям gridview, таким как KeyDown,EditControlShowing и т. Д. И т. Д.

1 ответ

Решение

Ты хочешь вот так

 DataGridView[] rtb = new DataGridView[100];
             for (int i = 0; i < 1; i++)
             {
                                //Start Gridview
                 rtb[i] = new System.Windows.Forms.DataGridView();
                 rtb[i].Location = new System.Drawing.Point(0, 50);
                 rtb[i].Size = new System.Drawing.Size(1020, 150);
                 //ID Column
                 rtb[i].Columns.Add("tr_id", "ID");
                 rtb[i].Columns["tr_id"].ReadOnly = true;
                 rtb[i].Columns["tr_id"].Width = 1;
                 rtb[i].KeyDown += new KeyEventHandler(xKeyEvent);
                 this.Controls.Add(rtb[i]);
             }

Key Down Event

 private void xKeyEvent(object sender, KeyEventArgs e)
        {
            MessageBox.Show("hi");
        }
Другие вопросы по тегам