C# 使用事件获取另一个 Form 中的数据,设计 Form 类型的弹窗
2022/2/6 1:13:23
本文主要是介绍C# 使用事件获取另一个 Form 中的数据,设计 Form 类型的弹窗,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
设计背景:
几个关键点围成一个多边形,并对多边形进行命名,但是不能与其他多边形名称重合。
FormMain:形成多边形,启动弹窗(FormAddFence)提示修改名称,如果名称与之前存在的多边形名称重复,则提示修改,否则返回 DialogResult.OK ,并通过事件形式修改FormMain中的变量。
FormMain:
// 创建一个事件的publish MyEventPublish myEventPublish = new MyEventPublish(); // 创建弹窗 Form formAddFence = new FormAddFence(fencesConfigFile, myEventPublish); // 把事件注册上,弹窗中发布事件,主窗口getName() 方法会执行 myEventPublish.MyEvent += getName; // 显示弹窗 if (formAddFence.ShowDialog().Equals(DialogResult.OK)) { //(窗口返回 DialogResult.OK ,这种方式在弹窗中会介绍) // 弹窗返回ok,认为在弹窗中的操作是预期的正确操作,一下是处理过程 }
弹窗:
启动弹窗(FormAddFence)效果:
按下确认键,会判断名称是否重复,如果重复,会弹出 MessageBox 提示
代码:
namespace GeoFence { public partial class FormAddFence : Form { // 窗口关闭后返回的结果,默认是Cancel DialogResult result = DialogResult.Cancel; // 我需要对比的源数据 List<Fence> fencesConfigFile = null; // 定义事件的发布,从主窗口接收 MyEventPublish myEventPublish = null; public FormAddFence(List<Fence> fences,MyEventPublish p) { InitializeComponent(); fencesConfigFile = new List<Fence>(fences); myEventPublish = p; } private void FormAddFence_FormClosing(object sender, FormClosingEventArgs e) { // 窗口关闭之前,更新结果,必要操作 this.DialogResult = result; } // 确认按键 private void buttonAdd_Click(object sender, EventArgs e) { // 去除多余的空格 string name = textBoxFenceName.Text.Replace(" ", ""); // 交叉比对 foreach (Fence f in fencesConfigFile) { // 已经有这个名称 if (f.Name.Equals(name)) { MessageBox.Show("存在相同名称,请修改!", " 提示", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } // 名称符合条件 result = DialogResult.OK; if (myEventPublish != null) { // 通过事件,使得 FormMain 中注册的 getName() 执行 myEventPublish.Send(name); } // 自动关闭窗口 this.Close(); } } }
事件发布者类:
public class MyEventPublish { public event Action<string> MyEvent; public void Send(string str) { if (MyEvent != null) { MyEvent(str); } } }
这篇关于C# 使用事件获取另一个 Form 中的数据,设计 Form 类型的弹窗的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#