1多窗体操作:
确定哪个是主窗体 通过窗体进入其他窗体 代码如下

 Form2 f2 = new Form2();//f2窗体实例化出来
f2.Show();//进入f2窗体
this.Hide();//将主窗体隐藏

存在问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示或关闭,那么程序就关不上了

问题处理:构造函数传值,将窗体传到另一个窗体中去

 public partial class Form2 : Form
{
Form1 F1 = null;//在窗体2中将窗体1实例化出来
public Form2(Form1 f1)
{
InitializeComponent();
F1 = f1; //给F1赋值
}
//找到窗体的属性 事件里面的Formclosing行为双击进入编写关闭代码;
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
F1.Close();关闭窗体2是窗体1关闭
}

2、窗体只能打开一个方法 代码如下

 //创建一个全局的泛型集合,为了放置全部打开的窗体
List<Form> First = new List<Form>();
//在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了
bool has = false;//定义中间变量,判断窗体是否打开
Form2 f2 = new Form2();//f2窗体实例化出来
foreach (Form F in First)//遍历集合中的窗体
if (F.Name == f2.Name)//已经开启过
{
has = true;//将has赋值为true
} if (has)//应经打开
{
}
else//没打开
{
First.Add(f2);
f2.Show();//打开f2窗体
}

存在问题一:当窗体打开了,关闭后,就无法再次打开了

解决办法:

 //当窗体关闭时,清除Form1中集合中的此窗体对象记录
public void deleteform(Form F)//清除打开窗体的方法(函数)
{
First.Remove(F);
}
//关闭窗体2时调用此方法
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (F1 != null)
{
F1.deleteform(this);
}

存在问题二:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入
解决办法:
1.找到已打开对象,将WindowState属性设置为:Normal
2.找到已打开窗体的对象,使用Focus方法;

 bool has = false;//定义中间变量,判断窗体是否打开
Form2 f2 = new Form2();//f2窗体实例化出来
foreach (Form F in First)//遍历集合中的窗体
if (F.Name == f2.Name)//已经开启过
{
has = true;//将has赋值为true
F.WindowState = FormWindowState.Normal;//找到已打开对象,将WindowState属性设置为:Normal
F.Focus();//设置焦点 } if (has)//应经打开
{
f2.close();
}
else//没打开
{
First.Add(f2);
f2.Show();//打开f2窗体
}

3、窗体之间的传值和控制

传值:构造函数传值

第一步,找到窗体对象,
第二步:将窗体对象的控件值更改
注意:要将窗体中的对象访问权限修改
找到窗体里的Form1.Designer.cs
进入修改对象的访问权限

将private 改为 public

4、提示框类型的窗体

ShowDialog();

作用:只能操作show的窗体,当关闭时才能操作别的窗体

WinForm 多窗体操作的更多相关文章

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

    Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...

  2. winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法

    最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...

  3. WinForm之窗体应用程序

    WinForm之窗体应用程序 基本简单数据库操作(增删改查) using System; using System.Collections.Generic; using System.Windows. ...

  4. C# 委托实例(跨窗体操作控件)

    在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托. 效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“ ...

  5. Winform子窗体刷新父窗体

    调用窗体(父):Form1,被调用窗体(子):Form2方法1:   所有权法//Form1://需要有一个公共的刷新方法public   void   Refresh_Method(){//...} ...

  6. WinForm 设置窗体启动位置在活动屏幕右下角

    WinForm 设置窗体启动位置在活动屏幕右下角 在多屏幕环境下, 默认使用鼠标所在的屏幕 1. 设置窗体的 StartPosition 为 FormStartPosition.Manual. 2. ...

  7. WinForm开发,窗体显示和窗体传值相关知识总结

    主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...

  8. C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)

    C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)   窗体缩放是一个困扰我多时的问题,为了解决这个问题,我从网上找了很多相关的资料,很多人说用Anchor和Dock属性,但是我试了 ...

  9. winform圆角窗体实现

    winform圆角窗体实现 1.窗体的FormBorderStyle设置成None,不要控制边框 2.TransparencyKey和BackColor颜色设置成相同的,这样,窗体就透明了 3.以此为 ...

随机推荐

  1. java中基本类型和包装类型实践经验

    至今,小菜用java快两年了,有些事,也该有个总结. 基本类型和包装类型的概念在本文不作赘述. 如果这两种类型直接使用,倒没什么值得讨论的,无非就是自动装箱拆箱,java可以让你感觉不到他们的存在,但 ...

  2. IOS Socket 03-建立连接与登录

    1. 搭建python服务器 这里我们用到python服务器Socket Server.如何运行Server?下面介绍 1)通过百度云下载文件 http://pan.baidu.com/s/1i5yb ...

  3. Logstash为什么那么慢?—— json序列化

    今天跟峡谷金桥聊天,询问起Logstash的性能,金桥提示说Logstash中json的序列化是浪费性能的一方面.于是便有了下面的测试: 第一步,造数据 首先需要造一份数据,数据可以通过logstas ...

  4. Java的声明和访问介绍

    1.类的声明 类本身的声明:对类的声明来说,主要包括类的访问权限声明和非访问修饰符的使用.对于一个普通的Java类(POJO)来说,主要的访问权限修饰符只有两个public和默认权限,内部类可以有pr ...

  5. 【java并发】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  6. Liferay7 BPM门户开发之46: 集成Activiti用户、用户组、成员关系同步

    在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户.组的同步需求非常重要,用来实现签收组的概念,比如指定签收组.会签.抢签都需要用到. Activiti可以通过自 ...

  7. Enerprise Solution Main 启动方法源代码

    .NET 系统以Main方法作为应用程序的启动入口点,Enterprise Solution的启动程序源代码如下: [STAThread] static void Main() { string MA ...

  8. mongodb-$type、limit、skip、sort方法、索引、聚合

    一.$type操作符 $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1   String 2 ...

  9. javase基础复习攻略《五》

    总结完JAVA的基础语法和面向对象思想后,今天为大家补充一下JAVA中的数组,数组是什么呢?大家是不是想到了集合,数组和集合有相似之处,集合中的数据无序,不可以重复.数组中则存放着具有相同特征的一组数 ...

  10. bootstrap插件思路整理

    知识有时也需温故知新嘛,本次做一次bs插件梳理. $.support.transition 通过判断自定义元素是否支持WebkitTransition.MozTransition.OTransitio ...