• 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);
                }
            }
        }
  • 相关阅读:
    webpack之模块(七)
    webpack之配置(六)
    webpack之插件(五)
    webpack之loader(四)
    webpack之模式(三)
    webpack之输出(二)
    webpack之入口起点(一)
    Dynamics CRM Tips
    Step by Step 开发dynamics CRM
    Loading Ring 使用文档
  • 原文地址:https://www.cnblogs.com/sethnie/p/15865065.html
Copyright © 2020-2023  润新知