【问题标题】:KeyDown and EditControlShowing Event For Dynamic created gridview动态创建的网格视图的 KeyDown 和 EditControlShowing 事件
【发布时间】:2013-11-29 17:13:48
【问题描述】:

在表单上,​​我放置了没有标签页的 Tabcontrol,并声明了变量 DataGridview 和 TabPage

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

之后我创建了一个名为 User Create TabPages 的函数并 带有基于文本框输入的列的 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 等事件。

【问题讨论】:

  • 你想要所有gridview的keydown吗?然后为所有gridview编写自己的事件和addhandler
  • 我在自定义事件创建中尝试但不能完美地为创建和调用此代码的 gridview keydown 和 editcontrol 提供示例
  • 只告诉我如何调用/eventhandler 以及我在哪里调用表单上的自定义创建 gridview 事件
  • 好的。所有gridview按键事件都做相同的操作或不同的操作
  • @SATSON 抱歉回复晚了,我要去吃午饭,所有 gridview 操作都一样

标签: c# winforms datagridview tabcontrol tabpage


【解决方案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]);
             }

按键事件

 private void xKeyEvent(object sender, KeyEventArgs e)
        {
            MessageBox.Show("hi");
        }

【讨论】:

  • 如何在keyHandler上调用XKeyEvent
  • 问题是它没有调用,因为我使用 gridview 数组变量
  • u 创建 KeyDown 的 xKeyEvent,下一步是什么?如何在 KeyEventHandler 上调用此事件以及在哪里????
  • rtb[i].KeyDown += new KeyEventHandler(xKeyEvent); 此代码用于将处理程序添加到 gridview。运行应用程序并在单元格中键入任何内容 datagridview 按键按下事件 (xKeyEvent) 被调用。 (在你的 for 循环中创建 datagridview)
  • Thx Buddy 它的工作我非常感谢你
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多