winform多窗体之间的操作

1.通过操作一个窗体打开另一个窗体

已有窗体为Form1.Form1中有一个按钮,对该按钮编写点击事件:

Form2 f2 = new Form2();
f2.Show();

通过这段代码来打开Form2.

在实际应用中会出现代开Form2后需要Form1隐藏的情况,此时可以加入代码:this.Hide();来实现隐藏Form1.

[不能关闭Form1,如果关闭Form1,那么Form2也会关闭,因为Form1是主窗体]

2.在窗体之间进行值的传递

在某些情况下,需要用到某个已经获取到的值,为了提高程序运行效率,不能再次查询这个值,这时候就需要传递值.

窗体间值的传递需要用到打开窗体.

Form2 f2 = new Form2(要传递的值);
f2.Show();

这个时候值已经传递到Form2去了,这时候需要考虑如何在Form2中取出这个值

Users z = null;//根据值的类型实例化
public Form4(Users a) //方法这里也要写要传入的值,注意类型
{
InitializeComponent();
z = a; //这个时候值就传递进来了,因为值定义在方法外面,所有在这个命名空间里面可以随意调用
}

3.窗体唯一性设置

打开一个窗体,这个窗体只能被打开一个,打开了一个,就不能再打开另一个窗体.

单纯的能够打开一个:

//实例化一个Form类型泛型集合,记录已经打开的窗体
List<Form>AllF=new List<Form>();
//点击事件,这里直接用大括号代替
{
//实例化一个点击要打开的Form1对象
   Form1 f1=new Form1();
//判断AllF里面有没有Form1
bool has=false;
//遍历泛型集合,看看里面有没有这个要打开的Form1
foreach(Form ff in AllF)
{
   if(ff is Form1)//如果ff是From1类型
   {
     has=true;
    //把查到的ff转换成Form1类型
     f1  =ff as  Form1;
    }
}
//如果有Form1,证明已经打开了
   if(has)
  {
   //当窗体最小化的时候将其还原到打开的默认状态
   f1.WindowState=ForWindowState.Normal;
   }
//如果没有说明还没有打开,那么打开Form1,并把Form1添加到集合AllF里
   else
   {
    AllF.Add(f1);
     f1.Show();
   }
}

这样实际实现了只能打开一个同样窗体的目的,但是这样有一个问题,就是打开一个窗体,关闭之后,就没法打开了.对此的解决发方法是:

写一个方法,在Form1的关闭事件FormClosing里面,每当关闭的时候把Form1给移除.

方法:

public void Fclose(Form a)

{

AllF.Remove(a);

}

将这个页面的所有都传过去:

//实例化一个点击要打开的Form1对象
   Form1 f1=new Form1(this);

然后在Form1的关闭事件FormClosing里面,调用移除的方法即可.

时间: 2024-10-06 10:52:26

winform多窗体之间的操作的相关文章

winform 窗体之间的操作

1 通过一个窗体按钮打开另一个窗体 Form f2 = new Form2(); f2.Show(); 通过这个打开第二个页面  要想只显示一个页面只能隐藏第一个页面 如果第一个页面关闭 第二个页面也会跟着关闭.. 2窗体之间的传值 窗体之间传值 需要两个甚至多个窗体 Form f2 = new Form2(要传递的值);f2.Show(); 然后再另一个需要这个值的窗体中 Users z = null;//根据值的类型实例化public Form4(Users a) //方法这里也要写要传入的

winform独立窗体之间传值的简单方法

最近做一个多窗体联动的小程序,用到了窗体间传值. 网络上到处都是父窗体和子窗体之间传值的方法,总结起来有 1.有参数的构造函数, 2.委托 以委托为例,父窗体如果想要发送信息给子窗体,只需要在父窗体中定义好事件. //str为发送内容,formName为指定要发送给的窗体名字 public delegate void ReceiveMsg(string str,string formName); public event ReceiveMsg receiveMsg; 然后在实例化子窗体时,将子窗

Winform跨窗体操作控件(使用委托)

Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,Form1按钮打开Form2,然后在Form2的TextBox输入值在Form1的TextBox中显示出来. 一.项目结构 Form1窗体设计: Form2窗体设计: 二.代码实现 在Form2的代码中声明一个委托(写在Form2类外)-> public delegate void ChangeFor

WinForm多窗体间操作,ComboBox下拉菜单控件

1.通过操作一个窗体打开另一个窗体 已有窗体为Form1.Form1中有一个按钮,对该按钮编写点击事件: Form2 f2 = new Form2();f2.Show(); 通过这段代码来打开Form2. 在实际应用中会出现代开Form2后需要Form1隐藏的情况,此时可以加入代码:this.Hide();来实现隐藏Form1. [不能关闭Form1,如果关闭Form1,那么Form2也会关闭,因为Form1是主窗体] 2.在窗体之间进行值的传递 在某些情况下,需要用到某个已经获取到的值,为了提

c# winform 窗体之间的传参

说起winform程序中窗体之间的参数互传,大家找度娘会找到很多方法: 1.在窗体类中创建全局变量,类型为公开.静态的: 2.在窗体类中定义狗仔函数: 3.通过实践来船体参数: 这三种思路完全来自于霖小屋的c# winform窗体之间传递参数问题总结,大家可以看看他的这篇博客学习学习. 下面我要给大家说的一种方法相对来说有点繁琐,但对于winform程序初学者来说绝对的受用.之前在度娘上寻找winform窗体的显示与隐藏受到点启发,本来winform程序创建新的窗体的时候是不带参数的,为了能够在

WinForm 多窗体、菜单和工具栏

今天,我首先先学习了一下在WinForm程序开发中常遇到的问题——多窗体程序运行问题. 在开发多窗体程序时,常会遇到以下四个方面的问题: 一.哪个是主窗体 问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了. 当遇到这个问题时,我们通常的解决办法是:构造函数传值,将窗体传到另一个窗体中去,进行关闭. 二.窗体只能打开一个 创建一个全局的泛型集合,为了放置全部打开的窗体.在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了. 问题:

WinForm 多窗体

多窗体:一.首先要想到的问题是:1.哪个是主窗体问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了 方法:用构造函数传值,将窗体传到另一个窗体中去 Form1: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

winform跨界面进行的操作

窗体之间除了以传递参数的方式进行互通外,还可以用委托 例子: form1 点击按钮,出现窗体2 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); Action<string> f2CallBack = x => { label1.Text = x;//函数体.要进行的操作 };//(3)设置与窗体2相同签名的委托 f2.CallBack = f2CallBack;//(4)对声

Winform开发框架里面使用事务操作的原理及介绍

在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据:除此之外,事务还能提高批量操作的效率,如在本地SQLite数据库里面,批量插入1万条数据,那么使用事务和没有使用事务,速度上至少差别几十到上百倍的差异.既然事务有完整性和速度性的差异,因此,基于上述原因,我们在很多情况下最好使用事务进行操作.本文主要介绍在开发框架中如何整合事务的操作,并介绍在各个分层中的事务使用案例. 由于我介绍的相关框架,主要是采用了