关于c#:再谈C-Winforms桌面应用程序实现跨窗体间委托传值实例

6次阅读

共计 2349 个字符,预计需要花费 6 分钟才能阅读完成。

文章首发于 码友网 —《再谈 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 窗体:FrmMainFrmCreateFrmList 和一个联系人的类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;}
    }
}

如果你对本演示的源码感兴趣,请至原文获取。

正文完
 0