首页 新闻 会员 周边 捐助

怎么将委托作为参数从主窗体传递到子窗体?

0
悬赏园豆:20 [已解决问题] 解决于 2014-09-15 21:14

如题,除了使用在主窗体内声明一个静态委托,从子窗体调用这个静态变量,还有其他方法吗?例如,将委托作为子窗体的构造函数中,可是我不知道这个要怎么写在构造函数里,也不知道这种方式能不能行的通。求指教。。。

.F.的主页 .F. | 初学一级 | 园豆:13
提问于:2014-07-12 02:00
< >
分享
最佳答案
0

你可以把委托当成一个类型来用,你如果通过构造函数传递一个int类型的值 你会吧,只不过现在换成委托类型的了。你同样可以这样用。

比如:有一个委托:public delegate string ShowMsg(string msg);

定义一个方法签名和返回值相同的方法,该方法的作用是将字符串转换为大写。

 private string ShowMsg(string msg)
        {
            return msg.ToUpper();
        }

你在父窗体单击一个按钮,打开子窗体,将方法传入,这样子窗体,就可以使用该方法了。

父窗体中代码:

  private void button1_Click(object sender, EventArgs e)
        {
            ChildForm child = new ChildForm(ShowMsg);
            child.ShowDialog();
        }
        private string ShowMsg(string msg)
        {
            return msg.ToUpper();
        }

子窗体代码:

 

  public partial class ChildForm : Form
    {
        private ShowMsg showMsgDelegate;
        public ChildForm(ShowMsg showMsgDelegate)
        {
            InitializeComponent();
            this.showMsgDelegate = showMsgDelegate;
        }

        private void ChildForm_Load(object sender, EventArgs e)
        {
          this.label1.Text=showMsgDelegate("abcdefghigklmnopqrstuvwxyz");
        }
    }

结果:

收获园豆:20
wolfy | 老鸟四级 |园豆:2636 | 2014-07-12 12:01
其他回答(3)
0

主窗体new子窗体对象后,直接给子窗体的字段赋值就行了。这个有什么好纠结的·,放在构造函数是里比较好

吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-12 08:57

怎么放呢  我确实不知道  

        
这是主窗体
public delegate void ChangeValue(string text);
        private void button3_Click(object sender, EventArgs e)
        {
            ChangeValue change = new ChangeValue(Change);
            ChildForm3 form = new ChildForm3(change);
            form.ShowDialog();
        }

        void Change(string text)
        {
            textBox3.Text = text;

        }


这个是子窗体
        Delegate Dele = null;
        public ChildForm3(Delegate dele)
        {
            InitializeComponent();
            Dele = dele;
        }
支持(0) 反对(0) .F. | 园豆:13 (初学一级) | 2014-07-12 09:15
0

知道事件吗?比如你给一个窗体的事件定义一个委托,但这个事件被触发的时候,

就会回执行这个委托.

 

同理,在主窗体中

子窗体 a=new 子窗体();

a.事件+=new 委托();

 

到时候, 就会触发了

[秦时明月] | 园豆:738 (小虾三级) | 2014-07-12 09:30

恩  这个是可以用   但是  我就是想知道怎么传递委托  将委托作为参数呢

但是  我又传不过去...o(╯□╰)o

支持(0) 反对(0) .F. | 园豆:13 (初学一级) | 2014-07-12 09:48
0

委托,你就当成一个类型来用就可以了。

forhells | 园豆:724 (小虾三级) | 2014-07-17 21:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册