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. JavaScript—之对象参数的引用传递

    变量 1.JavaScript hoisting >>请看例子,我们拿Chrome的console作为JS的运行环境. 上面直接执行console.log(a), 不带一点悬念地抛出了no ...

  2. jQuery 绑定事件到动态创建的元素上

    在进入主题之前,我们先来看一个前台页面经常用到的功能:点击页面输入框时自动选择其中文本. 很容易想到利用输入框的focus事件,当输入框获得焦点时,再调用jQuery的select()方法. Okay ...

  3. linux expect详解(ssh自动登录)

    shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:&quo ...

  4. 三天学会HTML5——SVG和Canvas的使用

    在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容. 第2天将学习如何使用Canvas 和使用SV ...

  5. Nodejs·进程

    之前对这部分的内容很感兴趣,没想到读起来有点晦涩,还是因为对服务器的知识不是很了解. 说道服务器一般人都会想到tomcat或者Jboss或者weblogic,现在流行起来的Node总让人不太放心,JS ...

  6. Atiit 如何手写词法解析器

    Atiit 如何手写词法解析器 1.1. 通过编程直接从正则->nfa->dfa->表驱动词法解析一条龙自动生成.那是用程序自动生成是需要这样的,自己手写完全不必要这么复杂1 1.2 ...

  7. fildder 使用方法汇总

    作为网络开发人员,怎能不使用一些抓包工具呢?fildder是个不错的选择. 不过,一般情况下,我们往往使用浏览器自带的控制台的[网络]选项就可以达到查看数据的通信情况了,当然,一些浏览器不容易捕捉的事 ...

  8. 部署到IIS报错:HTTP错误500.19,错误代码0x800700d

    title=部署到IIS报错:HTTP错误500.19,错误代码0x800700d.   用vs直接运行网站没问题,部署到IIS就报错,由此可知应该是IIS中不支持网站相关配置. 查找发现在web.c ...

  9. Index Seek和Index Scan的区别

    Index Seek是Sql Server执行查询语句时利用建立的索引进行查找,索引是B树结构,Sql Server先查找索引树的根节点,一级一级向下查找,在查找到相应叶子节点后,取出叶子节点的数据. ...

  10. CSS隐藏元素的N种实现方式。

    1. width:0; 光有高度是不行的,还得有宽度.缺点文字隐藏不了,可以加个color:#fff和背景颜色一样就ok了,障眼法,迷惑人的,其实内容还在,如果有文字的话,还是可以触发点击事件的,这种 ...