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. 用DirectX实现魔方(三)视角变换及缩放(附源码)

    在本系列第一篇介绍过鼠标按键的功能,如下. 左键拖拽 - 旋转魔方 右键拖拽 - 变换视角 滚轮 - 缩放魔方 今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现M ...

  2. 继电器是如何成为CPU的(2)

    继电器是如何成为CPU的(2) ——<穿越计算机的迷雾>整理和总结 上一篇已经从电池.开关.灯泡和继电器开始,画出了设计CPU所需的基本器件.这些器件将成为设计CPU的砖瓦木料.这一篇就用 ...

  3. webservice3

    什么是bottom up 什么是top down 通过浏览器访问如 http://localhost:8080/HelloWS/services/HelloWSsss?wsdl  获取的 wsdl, ...

  4. java 堆栈分析2

    有了mat.同时我们发现Java有提供jvisualvm, jvisualvm是一个不错的工具: heap dump . thread dump. cpu/mem profile 无所不能. 不过观察 ...

  5. easyuidatagrid中load,reload,loadData的区别。

    摘要:datagrid中有load,reload,loadData那三个方式,皆是加载数据的,但又有差别.下面让我们一起来看看: 首先,load方法,比如我已经定义一个datagrid的id为grid ...

  6. poj 3321 Apple Trie

    /* poj 3321 Apple Trie 这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题! 可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目 ...

  7. Vim多行缩进技巧

    按v进入visual状态,选择多行,用>或<缩进或缩出 通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起 ...

  8. PetaPoco 访问SQL SERVER 存储过程

    博客园有篇文章<小巧方便的ORM类库——PetaPoco>  介绍了PetaPoco调用存储过程: //调用存储过程 db.Execute("exec procSomeHandl ...

  9. 轻松自动化---selenium-webdriver(python) (六)

    本节知识点: 操作对象: · click 点击对象 · send_keys 在对象上模拟按键输入 · clear 清除对象的内容,如果可以的话 WebElement  另一些常用方法: · text  ...

  10. 谈谈Java程序员进阶的那些知识和方向

    谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...