C# 如何从控件创建事件';那还没有创造出什么?

C# 如何从控件创建事件';那还没有创造出什么?,c#,vb.net,winforms,datagridview,C#,Vb.net,Winforms,Datagridview,我的程序是创建datagridview程序,用户可以创建动态列,如行、列、面板(面板是面板的数量),这样用户也可以标记它, 据我所知,我可以用CurrentCell.Style.BackColor标记单元格 当我生成datagridview时,我已经指定了它的名称,但是!!!!它不能使用新的datagridvieweventhandler命令,因此我不能对每个datagridview执行任何操作 这是我的Datagridview生成代码 string[] Panelname = { "O

我的程序是创建datagridview程序,用户可以创建动态列,如行、列、面板(面板是面板的数量),这样用户也可以标记它, 据我所知,我可以用CurrentCell.Style.BackColor标记单元格

当我生成datagridview时,我已经指定了它的名称,但是!!!!它不能使用新的datagridvieweventhandler命令,因此我不能对每个datagridview执行任何操作

这是我的Datagridview生成代码

    string[] Panelname = { "One","Two","Three","Four","Five"};
    for(i=0;i<Panelname.length;i++){
    Generate(Panelname[i],a,b)}

    DataGridView generate(string name,int columns,int rows)
    {
        int i;
        Control Gen;
        Control LB;          
        LB = new Label();
        LB.Text = "Panel : "+name;
        LB.Location = new Point(50 + 120 / (c - 1) + 900 / c , 315);
        LB.BackColor = Color.Silver;
        Gen = new DataGridView();
        Gen.Name = name.ToString();
        Gen.Size = new Size(900/c,300 );            
        Gen.Location = new Point(120 / (c ) + 900 / c, 0);            
        DataGridView CH = (DataGridView)Gen;           
        CH.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        CH.CellClick += new DataGridViewCellEventHandler(CH_CellClick);
        CH.Location = new Point(0+locate, 0);

        for (i = 1; i <= columns; i++)
        {
            CH.Columns.Add("", "");

        }
        for (i = 1; i < rows; i++)
        {

            CH.Rows.Add("", "");

        }

        dataGridView1.Controls.Add(LB);
        dataGridView1.Controls.Add(CH);

         return null;


    }
string[]Panelname={“一”、“二”、“三”、“四”、“五”};

对于(i=0;i创建datagridview)

for (int i = 0; i < 10; i++)
{
    DataGridView d = new DataGridView();
    d.MouseClick += dataGridView_MouseClick;
}

我发现的问题是,当我在datagridview中创建datagridview时,很难定义您正在单击的datagridview是什么,所以我陷入这个问题有一段时间了

现在我找到了解决问题的方法现在,问题来了

对于(i=0;i 和*********CH.Click+=新事件处理程序(控制单击);**********这是我的英雄

    private void control_click(object sender, EventArgs e)
    {
        if (sender is DataGridView)
        {
            DataGridView A = (DataGridView)sender;
            textBox2.Text = A.CurrentCell.RowIndex.ToString();
            textBox1.Text = A.CurrentCell.ColumnIndex.ToString();
            textBox3.Text = A.Name.ToString();
        }
    }

在send control click函数中,您可以找到您的控件类型并将其强制转换,因此无论您单击哪个控件,现在都可以设置它的功能!

为什么您不能使用
DataGrid
事件处理程序?正如我所知,当对象已经创建时,可以创建事件处理程序,但在这种情况下,我仍然不要创建它,这样它就不能调用eventhandler来使用它为什么要调用eventhandler?我想你可以调用它,但通常它是由一个事件触发的,正如名字所说的那样当我想改变单元格颜色时,我必须调用eventhandler。我已经创建了5个datagridview,我想在文本框中显示我点击datagridview 1,我必须调用One_click事件,因为现在我的程序无法分离哪个datagridview正在选择sry,我的响应速度很慢,我不是很慢在englishokay的ood中,这是datagridview由datagridview d=new datagridview()创建的方式;因此我们可以调用add handler方法,但在我的情况下,我没有编写datagridview d=new datagridview()的代码;因为我必须使用for循环来创建它,所以它不能这样做。实际上,您可以…单个事件处理程序将处理无限数量控件的事件。这就是为什么.NET中的大多数(如果不是所有)事件处理程序的第一个参数都是sender参数的原因。
    DataGridView generate2(string name, int columns, int rows,int form)
    {

        Control Gen;
        Control LB;
        int x = 1;
        int runcolumn = columns;
        int runrow = rows;
        int count=0;

        LB = new Label();
        LB.Text = "Panel : " + name;
        LB.Location = new Point(50 + 120 / (c - 1) + 900 / c, 320);
        LB.BackColor = Color.Silver;
        Gen = new DataGridView();
        Gen.Name = name.ToString();
        Gen.Location = new Point(120 / (c) + 900 / c, 0);
        DataGridView CH = (DataGridView)Gen;
        CH.RowTemplate.Height = 290 / rows;
        CH.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        CH.Size = new Size(900 / c, 300);
        CH.RowHeadersWidth = 10;
        CH.ColumnHeadersHeight = 10;            
        CH.Location = new Point(0 + locate, 0);
    private void control_click(object sender, EventArgs e)
    {
        if (sender is DataGridView)
        {
            DataGridView A = (DataGridView)sender;
            textBox2.Text = A.CurrentCell.RowIndex.ToString();
            textBox1.Text = A.CurrentCell.ColumnIndex.ToString();
            textBox3.Text = A.Name.ToString();
        }
    }