Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向按钮添加OnClick事件_C#_.net_Winforms_Events_Button - Fatal编程技术网

C# 向按钮添加OnClick事件

C# 向按钮添加OnClick事件,c#,.net,winforms,events,button,C#,.net,Winforms,Events,Button,我正在尝试用C#创建一个POS系统(非常基本的一个),我在MYSQL数据库中有一些产品,我想把它们拉出来,然后显示在系统中 我可以用名称生成按钮没有问题,我的问题是,我想实现一种方法,让用户单击按钮并将其添加到列表框中-如果我知道数据库中产品的数量,这很容易做到,但我不会,所以我需要用按钮以编程方式生成onclick处理程序 以下是我的按钮生成代码: int i = 1; while (sqlReader.Read()) { //Create label var button

我正在尝试用C#创建一个POS系统(非常基本的一个),我在MYSQL数据库中有一些产品,我想把它们拉出来,然后显示在系统中

我可以用名称生成按钮没有问题,我的问题是,我想实现一种方法,让用户单击按钮并将其添加到列表框中-如果我知道数据库中产品的数量,这很容易做到,但我不会,所以我需要用按钮以编程方式生成onclick处理程序

以下是我的按钮生成代码:

int i = 1;

while (sqlReader.Read())
{
    //Create label
    var button = new Button {Text = String.Format(sqlReader.GetString("productName"), i)};
    //Position label on screen
    button.Left = 110;
    button.Top = (i + 1)*30;
    //Add controls to form
    Controls.Add(button);
    i++;
}

我意识到并非所有的按钮都在那里,但这是我用来生成按钮的while循环,所以我想知道处理程序是否会进入其中?

是的,无论何时创建按钮,都必须为其添加eventhandler:

button.Click+=按钮\u clicked事件



是的,无论何时创建按钮,都必须为其添加eventhandler:

button.Click+=按钮\u clicked事件



是的,无论何时创建按钮,都必须为其添加eventhandler:

button.Click+=按钮\u clicked事件



是的,无论何时创建按钮,都必须为其添加eventhandler:

button.Click+=按钮\u clicked事件



你的方法有点离经叛道,但你几乎做到了。您可以按照创建新按钮时指定
Text
属性的方式指定事件处理程序。如果按钮点击都会做同样的事情,你可以说:

单击的按钮将是在代码中某处定义的函数:

 private void button_Click(object sender, EventArgs e)
 {
    // add to listbox here
 }

将sender参数转换为一个按钮,以确定哪一个调用了click(如果需要),并执行您需要执行的任何操作。

您的方法有点不合常规,但您几乎做到了。您可以按照创建新按钮时指定
Text
属性的方式指定事件处理程序。如果按钮点击都会做同样的事情,你可以说:

单击的按钮将是在代码中某处定义的函数:

 private void button_Click(object sender, EventArgs e)
 {
    // add to listbox here
 }

将sender参数转换为一个按钮,以确定哪一个调用了click(如果需要),并执行您需要执行的任何操作。

您的方法有点不合常规,但您几乎做到了。您可以按照创建新按钮时指定
Text
属性的方式指定事件处理程序。如果按钮点击都会做同样的事情,你可以说:

单击的按钮将是在代码中某处定义的函数:

 private void button_Click(object sender, EventArgs e)
 {
    // add to listbox here
 }

将sender参数转换为一个按钮,以确定哪一个调用了click(如果需要),并执行您需要执行的任何操作。

您的方法有点不合常规,但您几乎做到了。您可以按照创建新按钮时指定
Text
属性的方式指定事件处理程序。如果按钮点击都会做同样的事情,你可以说:

单击的按钮将是在代码中某处定义的函数:

 private void button_Click(object sender, EventArgs e)
 {
    // add to listbox here
 }

将sender参数强制转换为按钮,以确定哪一个调用了click(如果需要),并执行任何需要执行的操作。

如果需要访问click处理程序中的产品信息,可以执行以下操作:

int i = 1;

while (sqlReader.Read())
{
    //Create label
    var button = new Button {Text = String.Format(sqlReader.GetString("productName"), i)};
    //Position label on screen
    button.Left = 110;
    button.Top = (i + 1)*30;

    // Get product data
    var prodData1 = sqlReader["prodData1"];
    var prodData2 = sqlReader["prodData2"];
    // etc.

    button.Click += (sender,e)=>{
        // In here, you can access prodData1 and prodData2
    };
    //Add controls to form
    Controls.Add(button);
    i++;
}

如果需要访问单击处理程序中的产品信息,可以执行以下操作:

int i = 1;

while (sqlReader.Read())
{
    //Create label
    var button = new Button {Text = String.Format(sqlReader.GetString("productName"), i)};
    //Position label on screen
    button.Left = 110;
    button.Top = (i + 1)*30;

    // Get product data
    var prodData1 = sqlReader["prodData1"];
    var prodData2 = sqlReader["prodData2"];
    // etc.

    button.Click += (sender,e)=>{
        // In here, you can access prodData1 and prodData2
    };
    //Add controls to form
    Controls.Add(button);
    i++;
}

如果需要访问单击处理程序中的产品信息,可以执行以下操作:

int i = 1;

while (sqlReader.Read())
{
    //Create label
    var button = new Button {Text = String.Format(sqlReader.GetString("productName"), i)};
    //Position label on screen
    button.Left = 110;
    button.Top = (i + 1)*30;

    // Get product data
    var prodData1 = sqlReader["prodData1"];
    var prodData2 = sqlReader["prodData2"];
    // etc.

    button.Click += (sender,e)=>{
        // In here, you can access prodData1 and prodData2
    };
    //Add controls to form
    Controls.Add(button);
    i++;
}

如果需要访问单击处理程序中的产品信息,可以执行以下操作:

int i = 1;

while (sqlReader.Read())
{
    //Create label
    var button = new Button {Text = String.Format(sqlReader.GetString("productName"), i)};
    //Position label on screen
    button.Left = 110;
    button.Top = (i + 1)*30;

    // Get product data
    var prodData1 = sqlReader["prodData1"];
    var prodData2 = sqlReader["prodData2"];
    // etc.

    button.Click += (sender,e)=>{
        // In here, you can access prodData1 and prodData2
    };
    //Add controls to form
    Controls.Add(button);
    i++;
}

要查看向控件添加事件处理程序的好例子,请查看表单的.Designer.cs文件。其中几乎每一行都有一个+=操作符,它将一个新的事件处理程序分配给一个控件


当我删除(通常为空)事件处理程序函数并重建解决方案时,我会在.Designer.cs中花费大量时间删除不需要的事件处理程序分配。错误总是在处理程序分配的行上。

要查看将事件处理程序添加到控件的良好示例,请查看表单的.Designer.cs文件。其中几乎每一行都有一个+=操作符,它将一个新的事件处理程序分配给一个控件


当我删除(通常为空)事件处理程序函数并重建解决方案时,我会在.Designer.cs中花费大量时间删除不需要的事件处理程序分配。错误总是在处理程序分配的行上。

要查看将事件处理程序添加到控件的良好示例,请查看表单的.Designer.cs文件。其中几乎每一行都有一个+=操作符,它将一个新的事件处理程序分配给一个控件


当我删除(通常为空)事件处理程序函数并重建解决方案时,我会在.Designer.cs中花费大量时间删除不需要的事件处理程序分配。错误总是在处理程序分配的行上。

要查看将事件处理程序添加到控件的良好示例,请查看表单的.Designer.cs文件。其中几乎每一行都有一个+=操作符,它将一个新的事件处理程序分配给一个控件


当我删除(通常为空)事件处理程序函数并重建解决方案时,我会在.Designer.cs中花费大量时间删除不需要的事件处理程序分配。错误总是在处理程序分配的行上。

如果我想添加有关该产品的信息,如何传递标识符。该系统基于大量产品,但我永远不知道确切的数量,因此如果您按下按钮X,那么系统将需要将产品X添加到列表框中。我正在考虑一个将产品信息添加到列表框中的函数,例如private void add(String product){listbox1.add(product);}但是我不知道如何通过点击按钮发送产品名称。我的想法是,一旦按下按钮(从数据库生成的按钮信息),它就会进入