Событие 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");
}