文章首发于 码友网 — 《再谈C# Winforms桌面应用程序实现跨窗体间委托传值(实例)》
前言
对于C# Winforms桌面应用程序跨窗体传值其实是一个陈词滥调的问题了。我之前在码友网也写过多篇C# Winforms桌面应用程序跨窗体传值的实例文章,比方:
《C# WINFORM窗体间通过委托和事件传值(自定义事件参数)–实例详解》
《C#/.NET WINFORM中应用委托和事件在类中更新窗体UI控件》
那为什么还要“再谈”C# Winforms桌面应用程序跨窗体委托传值呢?因为对于绝大多数C#&.NET老手来说,要学习并熟练掌握C#的委托,事件等是比拟难的知识点,须要开发者一直地学习和我的项目实际。
并且,实现C# Winforms窗体间传值的计划也并不止一种,本文将为C#&.NET开发者们演示应用一种非凡的委托(delegate)–Action
来实现的跨窗体传值实例。
成果预览
本实例次要演示的是联系人治理,其中包含新建联系人,联系人列表等性能。
实例的最终预览成果如下:
创立解决方案及我的项目
关上Visual Studio 2022,创立一个用于测试的解决方案,命名为:WindowsFormsApp1,再在解决方案中创立名为WindowsFormsApp1的我的项目。
别离新建三个Winform窗体:FrmMain,FrmCreate,FrmList 和一个联系人的类Contact.cs
联系人类(Contact.cs)定义如下:
using System;
namespace WindowsFormsApp1.Models
{
/// <summary>
/// 联系人
/// </summary>
public class Contact
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
}
主窗体FrmMain.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using WindowsFormsApp1.Models;
namespace WindowsFormsApp1
{
public partial class FrmMain : Form
{
private List<Contact> _contacts;
public FrmMain()
{
_contacts = new List<Contact>();
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var frm = new FrmCreate();
frm.OnContactCreated = (contact) =>
{
_contacts.Add(contact);
};
frm.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
var frm = new FrmList(_contacts);
frm.ShowDialog();
}
}
}
在主窗体,【新建联系人】按钮事件中,创立了FrmCreate
的实例frm
,同时为frm
实例设置了回调(委托)OnContactCreated
,这一步是委托传值的要害。
新建联系人窗体 FrmCreate.cs
using System;
using System.Windows.Forms;
using WindowsFormsApp1.Models;
namespace WindowsFormsApp1
{
public partial class FrmCreate : Form
{
public FrmCreate()
{
InitializeComponent();
}
/// <summary>
/// 联系人创立胜利的回调(委托)
/// </summary>
public Action<Contact> OnContactCreated;
private void btnSubmit_Click(object sender, EventArgs e)
{
var contact = new Contact
{
Id = Guid.NewGuid(),
Name = textBox1.Text.Trim(),
Email = textBox2.Text.Trim()
};
OnContactCreated?.Invoke(contact);
Close();
}
}
}
在【新建联系人】窗体中,咱们定义了联系人创立胜利的回调(委托),当点击“保留联系人”按钮后,如果调用者设置了OnContactCreated
回调,则会执行回调中的办法。其中,语句OnContactCreated?.Invoke(contact);
是要害。
联系人列表窗体 FrmList.cs
using System.Collections.Generic;
using System.Windows.Forms;
using WindowsFormsApp1.Models;
namespace WindowsFormsApp1
{
public partial class FrmList : Form
{
private List<Contact> _contacts;
public FrmList(List<Contact> contacts)
{
_contacts = contacts;
InitializeComponent();
}
private void FrmList_Load(object sender, System.EventArgs e)
{
dataGridView1.DataSource = _contacts;
}
}
}
如果你对本演示的源码感兴趣,请至原文获取。
发表回复