WinForm 多窗体操作
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 多窗体操作的更多相关文章
- Winform跨窗体操作控件(使用委托)
Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...
- winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法
最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...
- WinForm之窗体应用程序
WinForm之窗体应用程序 基本简单数据库操作(增删改查) using System; using System.Collections.Generic; using System.Windows. ...
- C# 委托实例(跨窗体操作控件)
在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托. 效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“ ...
- Winform子窗体刷新父窗体
调用窗体(父):Form1,被调用窗体(子):Form2方法1: 所有权法//Form1://需要有一个公共的刷新方法public void Refresh_Method(){//...} ...
- WinForm 设置窗体启动位置在活动屏幕右下角
WinForm 设置窗体启动位置在活动屏幕右下角 在多屏幕环境下, 默认使用鼠标所在的屏幕 1. 设置窗体的 StartPosition 为 FormStartPosition.Manual. 2. ...
- WinForm开发,窗体显示和窗体传值相关知识总结
主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
- C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)
C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率) 窗体缩放是一个困扰我多时的问题,为了解决这个问题,我从网上找了很多相关的资料,很多人说用Anchor和Dock属性,但是我试了 ...
- winform圆角窗体实现
winform圆角窗体实现 1.窗体的FormBorderStyle设置成None,不要控制边框 2.TransparencyKey和BackColor颜色设置成相同的,这样,窗体就透明了 3.以此为 ...
随机推荐
- [.net 面向对象编程基础] (12) 面向对象三大特性——继承
[.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...
- UDP Client—Linux
#include <stdio.h> #include <netinet/ip.h> int main(int argc,char *argv[]) { #define PER ...
- 用C表达面向对象语言的机制2——颠覆你对方法调用的看法!
用C表达面向对象语言的机制2——颠覆你对方法调用的看法! 源代码在文末.推荐阅读本文PDF版,格式更好看. 在上一篇<用C表达面向对象语言的机制——C#版>中,我们获知了如何用C表达面向对 ...
- 人机大战之AlphaGo的硬件配置和算法研究
AlphaGo的硬件配置 最近AlphaGo与李世石的比赛如火如荼,关于第四盘李世石神之一手不在我们的讨论范围之内.我们重点讨论下AlphaGo的硬件配置: AlphaGo有多个版本,其中最强的是分布 ...
- SQL——索引
索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表.在数据库系统中建立索引主要有以下作用: l快速存取数据: l保证数据记录的唯一性: l实现表与表之间的参照完整性: l在使用O ...
- 基础才是重中之重~方法override详解
回到 目录 之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享. 方法的override,即方法的覆写或者重写 ...
- Atitit paip.对象方法的实现原理与本质.txt
Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...
- 使用 flow.ci 实现 Android 自动化测试与持续集成
在上篇文章--如何实现 Android 应用的持续部署中,我们使用的是 flow.ci + Github + fir.im 实现 Android 应用的持续部署.对于 Android 开发者,他们可能 ...
- WPF入门教程系列十三——依赖属性(三)
四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只 ...
- eclipse提交项目到github
1.在https://github.com new repository 2.在eclipse中new project 比如:Test项目 3.右击"Test"->Te ...