ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# 使用事件获取另一个 Form 中的数据,设计 Form 类型的弹窗

2022-02-05 23:32:52  阅读:168  来源: 互联网

标签:OK Form C# myEventPublish DialogResult 弹窗 public FormAddFence


设计背景:

几个关键点围成一个多边形,并对多边形进行命名,但是不能与其他多边形名称重合。

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);
            }
        }
    }

 

标签:OK,Form,C#,myEventPublish,DialogResult,弹窗,public,FormAddFence
来源: https://www.cnblogs.com/sethnie/p/15865065.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有