委托实现窗体传递

委托可以将方法作为参数进行传递。

    public delegate void DGFillAreas(string ids,string names);  //定义委托
    //定义委托就是确定这个委托对象里面可以存储那一种签名(返回值/参数)的方法
    //如这个委托就说明了以后这种类型的委托对象里面就只能存储  无返回值  有两个String类型参数的方法,委托里面可以存储多个这种签名的方法
        private void btnChoice_Click(object sender, EventArgs e)
        {
            FrmAreas frm = new FrmAreas(FillAreas);    //将方法作为参数传递
            frm.ShowDialog();
        }

        public void FillAreas(string ids, string names)    //委托方法的具体实现
        {
            this.txtDistrict.Text = names;
            this.txtDistrict.Tag = ids;
        }
        DGFillAreas dgfrm;          //定义一个委托类型
        public FrmAreas(DGFillAreas dgfrm)      //次窗体构造函数,接受从主窗体传回的委托
        {
            InitializeComponent();
            this.dgfrm = dgfrm;
        } 
           dgfrm.Invoke(aids.ToString().Substring(0, aids.Length - 1), anams.ToString().Substring(0, anams.Length - 1));   //调用委托方法

 

此方法的好处在于将方法作为参数传递从主窗体传递到次窗体,所以次窗体只能调用委托的方法,而不能调用主窗体的公有成员。

时间: 2024-09-29 02:45:35

委托实现窗体传递的相关文章

C#中利用委托创建窗体单向通信

初学者在开始学习的时候,对于委托很难做到一下子理解,其中也包括我.委托好比一座大山,没爬上山顶就不能有"一览众山小"的感觉,只有你真正的爬到山顶的时候,才会发现大自然的是神奇. 委托我们可以把它认为是一个类,而不是一个方法.用委托我们可以调用方法,来简化程序,非常像C++中的指针. 使用委托的一般步骤为: (1)定义委托,delegate 返回值类型 委托类型名称(参数列表): (2)声明方法: (3)实例化委托,注意声明的类型要和方法中的类型一样. 下面给出例子,利用委托创建窗体单向

.net中用Action等委托向外传递参数

原文:.net中用Action等委托向外传递参数      一般我们可以使用ref,out达到向外传递参数目的. Action<T>是一个特殊的委托,除了常规应用.我们还可以用它来实现简单地向外传递参数.直接看下面的UnitTest代码: 1: [TestMethod] 2: public void PassOutParametersUsingDelegate() 3: { 4: int i = 0; 5: string messgae = string.Empty; 6: int? adde

JS加载获取父窗体传递的参数

JS加载获取父窗体传递的参数 $(document).ready(function () { var query = location.search.substring(1); var values = query.split("&"); for (var i = 0; i < values.length; i++) { var pos = values[i].indexOf('='); if (pos == -1) continue; var paramname = v

委托与窗体应用程序的学习

委托:函数的容器,能存放参数类型相同的函数.定义:public delegate void Mydele(int a,int b);与类平级,放在类的外面.用法:①在主函数的里面创建一个变量,Mydele md:②将一个符合其要求的函数放入该变量里,Class1 c=new Class 1();md=Class1.Add:③使用,md(): 委托变量之间的加法运算(必须是同类型):md=a+b:委托变量之间的减法运算(必须是同类型):md=md-b: 窗体:也是一个类继承于Form类(有各种小控

在线程中使用委托进行窗体控件赋值

若对窗体控件label进行赋值 delegate void SetLabelText(int str);//定义委托,用来完成线程的赋值 /// <summary> /// 为label赋值 /// </summary> /// <param name="str"></param> private void setLabel(int str) { this.lbCountY.Text = Convert.ToInt32( str).ToS

C#学习笔记(9)——委托(窗体传值)

说明(2017-5-30 11:38:06): 1. 窗体1传值到窗体2,只要实例化Form2,"Form2 frm2 = new Form2(txt1.Text)",这里要给Form2加一个带参数的重载,并且继承this,因为要初始化.把txt1.Text传入窗体2接收就可以了. 2. 窗体2再传值回窗体1,就要用到委托了,因为不是传值,而是传方法(如果再实例化一个Form1,那就是打开一个新窗口了). (1)在Form1里加一个方法ShowMsg,作用是将参数msg赋值给txt1.

接口多态实现窗体传递

public interface IFillAreas { void FillAreas(string ids, string names); //接口中定义方法签名 } public partial class FrmPerson : Form,interfaces.IFillAreas //窗体继承于接 private void btnChoice_Click(object sender, EventArgs e) { FrmAreas frm = new FrmAreas((interfa

iOS 委托 页面之间传递数值

ios的页面传值方法很多,本博客主要是 通过委托模式 来传值. 将一个页面中时间选择器的值传递到另外一个页面 主要包括三个模块 第一:A类 第二:委托协议 第三:B类 首先定义个一委托UIViewPassValueDelegate用来传递值 @protocol ViewPassValueDelegate <NSObject> -(void) passValue :( NSString *) value; @end 在A类中声明 委托,并且实现这个委托 @property (nonatomic,

C# 一个子窗体向父窗体传递参数的例子

一.编码思路 在父窗体使用Lambda表达式自定义事件赋给子窗体内定义的事件,通过在子窗体内调用事件实现传参 二.传递的参数 创建文件SomeUtility.cs,在类SomeUtility中声明结构ReturnStruct using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EventTest {