动态按钮单击:传递所有相同的参数

时间:2015-09-06 12:12:52

标签: c# winforms

我写了一个小软件,它从MySQL数据库中检索一些数据,然后通过表格格式的标签显示它们。现在为每个"行" (或信息)用户可以从MySQL数据库中删除该信息。 那么,这是一段代码:

public Form1()
{
   InitializeComponent();
   MySqlConnection conn = null;
   MySqlDataReader mainrdr = null;
   if (open_connection()) //open_connection simply opens a connection to MySQL DB and returns true or false according if the connection was opened with success or something else.
   {
      string query = "SELECT * FROM res_ev;";
      MySqlCommand cmd = new MySqlCommand(query, conn);
      mainrdr = cmd.ExecuteReader();
      While(mainrdr.Read())
      {
        Label label = new Label();
        Button button = new Button();
        ...
        ... //DEFINING PROPERTY OF THESE OBJECTS
        ...
        string inform = mainrdr.GetString(0);
        button.Click += new EventHandler((s, e) => remove(s, e, inform));
        ...
        ...
      }
      ...
   }
}
private void remove(object sender, EventArgs e, string info)
{
   MessageBox.Show(info);
   ...
   ...
}

问题是:
"inform"子句中的字符串While假定始终是正确的信息

对于前。

  • 循环1
    告知是Apple
    button.Click remove函数inform中的AppleBook;

  • 循环2
    告知是button.Click
    remove inform函数Book中的Marshmallowbutton.Click;

  • 循环3
    告知是remove
    inform Marshmallow函数While中的assert getSupportActionBar() != null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); assert getSupportActionBar() != null; getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().show(); }

但是当我单击动态创建的每个按钮时,所有按钮都会显示for %%a in ("%~p0.") do echo(%%~nxa 子句中inform所假设的最后一个字符串。

所以我希望如果我点击第一个按钮(在循环1中创建),它必须显示" Apple",第二个" Book"最后一个" Marshmallow"。

有什么想法解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

似乎您在表单中添加了相同的按钮。

如何将表单添加到表单?

答案 1 :(得分:0)

我解决了我的问题! 问题是:在我的实际代码中我有

public Form1()
{
string inform;
InitializeComponent();
MySqlConnection conn = null;
MySqlDataReader mainrdr = null;
if (open_connection())   {
  string query = "SELECT * FROM res_ev;";
  MySqlCommand cmd = new MySqlCommand(query, conn);
  mainrdr = cmd.ExecuteReader();
  While(mainrdr.Read())
  {
    Label label = new Label();
    Button button = new Button();
    ...
    ... //DEFINING PROPERTY OF THESE OBJECTS
    ...
    inform = mainrdr.GetString(0);
    button.Click += new EventHandler((s, e) => remove(s, e, inform));
    ...
    ...
  }
  ...
  }
}

虽然上面发布的代码确实是正确的...所以我不明白为什么如果我在其中定义字符串通知虽然它工作正常并且如果我在While循环之外定义字符串通知它没有'工作?