美文网首页
C#非模态窗体,不同窗体之间即时交互

C#非模态窗体,不同窗体之间即时交互

作者: 西瓜精233 | 来源:发表于2019-04-26 20:58 被阅读0次
介绍

主要解决不同窗体的交互问题,为了减少类与类之间的耦合,使用事件绑定的方法,借鉴博客:(https://blog.csdn.net/lisenyang/article/details/18350271)。。

非模态的交互

1、思路

本文以Form1、Form2为例,Form2的按钮去控制Form1的函数。寻常的思路是Form2中实例化Form1,然后用button_Click控制调用form1的某个函数。而非模态的交互则是利用事件的绑定,思路如下:
1、在Form2中定义一个事件:
public event EventHandler ButtonClickEvent;
2、form1中写一个方法:

  void Function1(Object sender,EventArgs e)
        {
            MessageBox.Show("主窗体事件");//TODO
        }

3、在Form1中绑定Form2定义的事件(假设点击按钮弹出form2对话框):

 private void button1_Click(object sender, EventArgs e)
        {
            form2 fm2 = new form2 ();
            fm2 .ButtonClickEvent += Function1;
            ctt.Show();//用Show不关闭form2也可以对form1操作,ShowDialog不关闭则不能对其他窗体操作
        }

如果想从让form1里的控件去控制form2的函数的话,以上思路中的form1和form2对调一下即可。


过程
2、源码

Form1:

  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 fm2 = new Form2();
            fm2.ButtonClickEvent += Function1;
            fm2.Show();
        }
        void Function1(Object sender, EventArgs e)
        {
            MessageBox.Show("主窗体事件");//TODO
        }
    }

Form2:

 public partial class Form2 : Form
    {
        public event EventHandler ButtonClickEvent;
        public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ButtonClickEvent(this, e);
        }
    }

相关文章

  • C#非模态窗体,不同窗体之间即时交互

    介绍 主要解决不同窗体的交互问题,为了减少类与类之间的耦合,使用事件绑定的方法,借鉴博客:(https://blo...

  • Delphi窗体创建

    Delphi窗体创建,主要分为模态创建和非模态创建窗体,区别在于当显示模式窗体的时候你是不能操作本程序的其他窗体的...

  • Python测试开发-创建模态框及保存数据

    原创: fin 测试开发社区 前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体。可用来做交互,我们...

  • 11月6日C#学习总结

    今天学习了模式窗体和非模式窗体、定时器控件、进度条控件。 模式窗体:模态对话框,窗体打开时,只能对其进行相应的操作...

  • 11月6日四期C#总结

    今天老师带我们学习了第七章的模式窗体和非模式窗体、定时器控件、进度条控件。 模式窗体:模态对话框,窗体打开时,只能...

  • 11-6学习总结

    今天学习了c#第7章: 1:非模式窗体 非模式对话框 窗体打开时,将始终显示在当前应用程序窗体的最上层,此时,既可...

  • QT 窗口关闭自动销毁

    QT 窗口创建时,无论是模态或者是非模态的,可以通过设置窗体属性来进行销毁设置,设置该属性后,窗体如果关闭,窗体申...

  • Bootstrap 插件

    Bootstrap 模态框(Modal)插件 模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一...

  • Bootstrap使用模态框modal实现表单提交弹出框

    Bootstrap 模态框(Modal)插件 模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一...

  • C#如何创建MDI子窗体

    C#中怎样创建MDI子窗体?在MDI主窗体的【属性】对话框中,将MDI主窗体的IsMdiContainer属性设为...

网友评论

      本文标题:C#非模态窗体,不同窗体之间即时交互

      本文链接:https://www.haomeiwen.com/subject/gjxcnqtx.html