none
Winform User control 问题 RRS feed

  • 问题

  • 各位好,我有个User control的问题

    我有个User control叫UC,我想要UC被点击的时候去做 Parent Form所定义的某个方法,并且此方法还和UC的属性有关

    希望高手们给个思路

    2010年5月28日 8:36

答案

  • 对不起,看错了,以为是WPF,WinForm就更简单了,如下:

    Parent Form 有一个方法:

    void DoSomething(string id)

    {

      //...............
    }

    给UC定一个委托:

    public delegate void DoSomethingHandler(string id);

    public DoSomethingHandler Handler;

    创建UC后,Parent Form 将自己的DoSomething函数附加到UC.Handler上:

    UC.Handler= new DoSomethingHandler(this.DoSomething);

    点击UC中的Panel后,在Panel的事件处理函数中:

    if(this.Handler != null)

    {

      this.Handler(UC.ID);

    }

    2010年5月28日 10:19

全部回复

  • 当然是为某个方法定一个DelegateCommand<T>,其中T为UC的某个属性,

    然后把UC的Command 绑定到DelegateCommand<T>上,同时CommandParameter绑定到UC的属性上.

    DelegateCommand<T>是CAL中对WPF原有的ICommand的实现.

    2010年5月28日 8:43
  • 呵呵,明显看出来这个在我能力之外,希望能给个例子

    具体情况是这样,UC中接收的是Panel的双击事件,属性是ID

    不知道UC和Form中的方法具体如何定义

    万分感谢

    2010年5月28日 8:58
  • 对不起,看错了,以为是WPF,WinForm就更简单了,如下:

    Parent Form 有一个方法:

    void DoSomething(string id)

    {

      //...............
    }

    给UC定一个委托:

    public delegate void DoSomethingHandler(string id);

    public DoSomethingHandler Handler;

    创建UC后,Parent Form 将自己的DoSomething函数附加到UC.Handler上:

    UC.Handler= new DoSomethingHandler(this.DoSomething);

    点击UC中的Panel后,在Panel的事件处理函数中:

    if(this.Handler != null)

    {

      this.Handler(UC.ID);

    }

    2010年5月28日 10:19
  • 没有问题,非常感谢

    但我有个问题,如果这个方法需要两个参数,一个来源于UC本身,另一个则是调用此方法时才确定,这种情况如何处理?

    难道要在UC中声明变量,然后预先设定,把两个变量全都变成源于UC本身?

    2010年5月31日 3:05
  • 这得看你这个参数到底是从哪儿来的.

    delegate 也可以传递多个参数,如下:

    Parent Form 有一个方法:

    void DoSomething(string id,string value)

    {

      //...............
    }

    给UC定一个委托:

    public delegate void DoSomethingHandler(string id,string value);

    public DoSomethingHandler Handler;

    创建UC后,Parent Form 将自己的DoSomething函数附加到UC.Handler上:

    UC.Handler= new DoSomethingHandler(this.DoSomething);

    点击UC中的Panel后,在Panel的事件处理函数中:

    if(this.Handler != null)

    {

     string value = "不知道从哪儿给赋值的参数";

      this.Handler(UC.ID,value);

    }

    2010年5月31日 3:34
  • 非常非常感谢
    2010年6月3日 2:14
  • 很有帮助,谢谢

    2011年2月22日 1:44