动态生成方法值

时间:2012-12-27 11:33:33

标签: c# dynamic methods

此代码将帮助我生成此序列中的标签,例如

  

A1 A2 A3 A4 A5
  B1 B2 B3 B4 B5
  C1 C2 C3 C4 C5
  D1 D2 D3 D4 D5

但现在我想要的是我可以点击标签,每个标签都有自己的ID并调用方法来检查是否可以免费使用。
所以我需要让它自动生成粗体部分

vartable[namelabel].Click += new System.EventHandler(**vartable[namelabel]_Click**);

namelabel与名称或

自动生成相同
Private void lbl11_Click

我该怎么办?

private void button1_Click(object sender, EventArgs e)
    {

        for (int i = 1; i <= 9; i++)
        {
            for (int q = 1; q <= 9; q++)
            {
                string lettle="a";
                if(i==1)
                {
                    lettle="A";
                }
                else if(i==2)
                {
                    lettle="B";
                }
                else if (i == 3)
                {
                    lettle = "C";
                }
                else if (i == 4)
                {
                    lettle = "D";
                }
                else if (i == 5)
                {
                    lettle = "E";
                }
                else if (i == 6)
                {
                    lettle = "F";
                }
                else if (i == 7)
                {
                    lettle = "G";
                }
                else if (i == 8)
                {
                    lettle = "H";
                }
                else if (i == 9)
                {
                    lettle = "I";
                }

                string labeltext = lettle + q;
                int y = (100 + (q * 20));
                int x = (100 + (i * 20));
                string namelabel = "lbl" + i + q;
                var method = namelabel;
                   var vartable = new Dictionary<string, Label>();
                    vartable[namelabel] = new Label();
                    vartable[namelabel].AutoSize = true;
                    vartable[namelabel].Location = new System.Drawing.Point(y, x);
                    vartable[namelabel].Name = namelabel;
                    vartable[namelabel].Size = new System.Drawing.Size(35, 13);
                    vartable[namelabel].TabIndex = 1;
                    vartable[namelabel].Text = labeltext;
                    vartable[namelabel].Cursor = System.Windows.Forms.Cursors.Hand;
                    this.Controls.Add(vartable[namelabel]);
                    vartable[namelabel].Click += new System.EventHandler(**vartable[namelabel]_Click**);



            }

        }

1 个答案:

答案 0 :(得分:0)

您可以使用Label的“Tag”属性(从基类Control继承)来存储座位号。这允许您对所有Label对象使用相同的事件处理程序。一旦调用了事件处理程序,它就可以通过检查Tag实际单击了哪个Label来确定。

预订/可用信息可以存储在由座位编号索引的布尔数组中。

示例事件处理程序:

 private void label_Click(object sender, EventArgs e)
        {
            if (((Label)sender).Tag.Equals("1"))
            {
                MessageBox.Show("Label 1 clicked!");
            }
        }