委托在winform开发中用于窗体传值

1、为什么要用委托?
委托可以将方法作为实参传递给另一个方法,那么我们在winform开发中经常会遇到这样的情况,窗体1中定义了方法1,在窗体1中我们要打开窗体2,并且在窗体2中也要用到方法1,这个用法在窗体1是主窗体,窗体2是参数设置窗体的情况下经常使用,比如我开发运动控制软件,窗体1中有读取某个轴的坐标的方法1,我要利用窗体2去设置一个坐标,那么我就可以将方法1通过委托在实例化窗体2的对象时,将委托作为窗体2构造函数的参数传入,代码如下:

   public partial class Form2 : Form
    {
        Func<int, string>[] GetValueDelegate;
        Action<int> ShowValueDelegate;
        public Form2(Func<int, string>[] func, Action<int> action)
        {
            this.GetValueDelegate = func;
            this.ShowValueDelegate = action;
            InitialForm();
            InitializeComponent();
        }
        private void InitialForm()
        {
           for(int i=0;i< GetValueDelegate.Length;i++)
            {
                string str = GetValueDelegate[i](10);
                Console.WriteLine("轴{0}的坐标是{1}",i,str);
            }
            ShowValueDelegate(200);
        }
    }

Form2中定义了两种委托,一个是有返回值的委托数组func,另一个是没有返回值的委托action,我们将这两个委托作为构造函数的参数传入,InitialForm的作用就是调用这两个委托。

  private void button1_Click(object sender, EventArgs e)
        {
            Func<int, string>[] func=new Func<int, string>[2];
            Action<int> action;
            func[0] = GetValue0;
            func[1] = GetValue1;
            action = ShowValue;
            Form2 fm2 = new Form2(func, action);
            if (fm2.ShowDialog() == DialogResult.OK)
            {
                Console.WriteLine();
            }
        }
        private string GetValue0(int value)
        {
            double str = value + 10;
            return str.ToString();
        }
        private string GetValue1(int value)
        {
            double str = value + 20;
            return str.ToString();
        }
        private void ShowValue(int value)
        {
            Console.WriteLine(value);
        }

我们在button1事件中,声明委托,并对委托进行赋值,然后实例化Form2并将委托作为参数传入,最终得到的结果如下:

0的坐标是201的坐标是30
200

我们成功的将委托作为参数传入了form2中,并且实现了调用,所以这里委托将方法作为参数进行跨窗体传值是非常方便的。

WinForms (Windows Forms) 是.NET Framework 提供的一种创建Windows桌面应用程序的图形用户界面的类库。在WinForms,控件是构成窗体界面的基本元素,而数据传递则是界面交互的基础。下面是关于UseControl和WinForms窗体之间传值的一些介绍: 1. **UserControl**:UserControl 是 WinForms 可以自定义的控件类型,它允许开发者封装一组相关的控件,并且可以像使用普通控件一样在窗体使用。开发者可以在UserControl定义属性、方法和事件,以便在外部窗体使用。 2. **WinForms窗体传值**:通常在WinForms应用程序,一个窗体可以打开另一个窗体。如果需要在这些窗体之间传递数据,可以通过以下几种方式实现: - **构造函数**:可以在打开新窗体时,通过构造函数将数据传递给目标窗体。 - **公共属性**:为目标窗体定义公共属性,然后在打开窗体前设置这些属性的值。 - **事件和回调函数**:定义事件和回调函数来传递数据。例如,可以在一个窗体定义一个事件,然后在另一个窗体创建该事件的委托和方法来接收数据。 - **静态变量**:使用静态变量可以在窗体间共享数据,但这种方式可能导致代码难以维护,并增加出错的风险。 在使用UserControl时,如果需要从UserControl传递数据到宿主窗体,可以使用类似的方法,比如在UserControl定义公共属性或者事件,然后在宿主窗体访问和响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c#上位机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值