现在有一个方法:
private void fx()

   

其中有很多语句了,咱们不赘述,还有另外一个方法:
void textClick(object obj,EventArgs ea)
{
  Process.Start("IExplore.exe",@"http://www.baidu.com/");
}上面这个方法我希望它并不是一个,但是具体有多少个我不知道,它的数量是由方法fx()中检索数据库中的数据条数来决定的,比如说数据条数是2条,那么我希望会这样:
void textClick1(object obj,EventArgs ea)
{
  Process.Start("IExplore.exe",@"http://www.baidu.com/");
}
void textClick2(object obj,EventArgs ea)
{
  Process.Start("IExplore.exe",@"http://www.sina.com/");
}
也就是说会产生两个方法,类似,如果数据数是5条,那么就会产生5个方法,而且方法中的网址是通过一个变量传进去的,仅仅这样还不够,还不能实现我要的效果,当检索数据库,产生了5个方法之后,还要在public frmMain()方法中,自动生成事件:
public frmMain()

InitializeComponent();sportTask.textClick+=new EventHandler(textClick1);
sportTask.textClick+=new EventHandler(textClick2);

检索出了多少条数据,就会自动生成多少个方法,自动生成了多少个方法,就自动多少个事件,请问我如上的想法如何能够实现?谢谢大家费心!这个问题我真是搞不定,又很着急!

解决方案 »

  1.   

    sportTask.textClick+=new EventHandler(textClick1); 
    sportTask.textClick+=new EventHandler(textClick2); 
    ========
    这个写错了吧?
    sportTask应该不是同一个吧?应该也是变化的.
    如果是同一个注册到不同的textClick1,textClick2感觉没什么意义
      

  2.   


    对.
    你可以把不同控件的textClick注册到同一个方法中.相当于多个控件用一个方法.一个控件用多个方法.
      

  3.   

    没有写错,这样做的目的是:一次单击,执行多次事件,也就是说,执行一次单击,能把textClick1,textClick2等等方法都执行,这就是我想要的效果,但是我没有办法把它做成动态生成的
      

  4.   

    Button[] btns = new Button[10];
    string[] urls = new string[10];
    //给btns,urls赋值
    foreach(Button btn in btns)
    btn.OnClick += new System.EventHandler(btn_Click);void btn_Click(object sender, EventArgs e)
    {
    //根据sender获取应该使用哪个url
    Process.Start("IExplore.exe",urls[i]); 
    }
      

  5.   

    请参考下面的代码,这里的循环可以换成你自己的循环,想循环多少循环多少    class test {
            public void Do() {
                if (textclick != null) {
                    textclick(this, new EventArgs());
                }
            }
            public event EventHandler textclick;
        }
        
        class Program {
            static void Main(string[] args) {            test t = new test();
                // build methods
                ArrayList methods = new ArrayList();
                for (int i = 0; i <= 5; i++) {
                    methods.Add(new EventHandler(delegate { Process.Start("IExplore.exe", @"http://www.baidu" + i.ToString() + ".com/"); }));
                }
                // add event
                for (int i = 0; i <= 5; i++) {
                    t.textclick += (EventHandler)methods[i];
                }
                t.Do();
            }
        }    
      

  6.   

    写一个类,里面定义你的事件处理方法。
    public class ClickHandler
    {
    void textClick(object obj,EventArgs ea) 

      Process.Start("IExplore.exe",@"http://www.baidu.com/"); 
    } }使用的时候,new这个对象,然后绑定到这个对象的textClick函数。
    需要其他参数就在ClickHandler 类里面定义。
    ClickHandler handler = new ClickHandler();
    sportTask.textClick+=new EventHandler(handler.textClick1); 
      

  7.   

    1,如果方式不改变的话建议使用
    2,换一种思维考虑的话,一个事件执行一个方法
    void textClick(object obj,EventArgs ea) 

      for(int i=0;i<记录数;i++)
      Process.Start("IExplore.exe",传过来的数组中的值);