博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinFormd多窗体 菜单和工具栏:
阅读量:5009 次
发布时间:2019-06-12

本文共 2993 字,大约阅读时间需要 9 分钟。

一、多窗体

 

1、哪个是主窗体

主窗体就是如果关掉这个窗体,程序就会退出的那个窗体1

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

 

办法:构造函数传值,将窗体传到另一个窗体中去,在FormClosing事件中关闭form1。

  

2、要求窗体只能打开一个。

创建一个全局的泛型集合,为了放置全部打开的窗体

1、在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了

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

办法:当窗体关闭时,清除Form1中集合中的此窗体对象记录
问题:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入
办法:
找到已打开对象,将WindowState属性设置为:
找到已打开窗体的对象,使用Focus方法;

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication16{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        List
flist = new List();//建立全局泛型集合,看看是否有form2。 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(this); bool has = false; foreach (Form a in flist)//第一次点击,肯定没有form2,此时会直接绕过遍历。 //如果在下面的if后面接着写else,form2都不会出现。必须写遍历后面。 { if (a.Name == f2.Name)//若果已经有了form2,就让form2显示出来,并且鼠标在上面。 { has = true; a.WindowState = FormWindowState.Normal;//让form2显示出来 a.Focus();//鼠标在form2上面 } } if (has)//如果有form2 { f2.Close();//此时f2为上面又一次实例化出来的,为多余的。 } else//没有form2,就把form放到集合里面,然后显示出来 { flist.Add(f2); f2.Show(); } //this.Hide(); } }}
View Code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication16{    public partial class Form2 : Form    {        Form F1 = null;//创建全局变量F1        public Form2(Form1 f1)//把form1传到form2中,对form1进行操作        {            InitializeComponent();            F1 = f1;//此时F1就是代表着form1。        }        private void Form2_Load(object sender, EventArgs e)        {        }        private void Form2_FormClosing(object sender, FormClosingEventArgs e)        {            //F1.Close();        }    }}
View Code

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

传值:构造函数传值(在form2里面传入Form1和其所传内容,如在form2后台  public Form2(Form1 f1,string a);,在form1后台Form2 f2 = new Form2(this,textBox1.Text);)

控制:第一步,找到窗体对象,第二步,将窗体对象的控件值更改

注意:要将窗体中的对象访问权限修改,将private 改成public

4、提示框类型的窗体

ShowDialog();

作用:只有操作完当前窗口,才能操作其他窗口。

 

二、菜单和工具栏:

1、MenuStrip:顶部菜单

分割线:

1、在每一行的下面单独输入“-”(减号)

2、右键选择《插入》-《separator》

3、插入标准项:选中MenuStrip。右键选择“插入标准项”。

快捷键:每一个项右键属性的最下面的ShortCutKeys可以设置快捷键

不管选项Visible=True或者False,快捷键都管用

2、ContextMenuStrip:

右键菜单,里面输入的选项都可以当做事件。在form的ContextMenuStrip属性里面选中自己所建立的ContextMenuStrip,就可以了!

3、StatusStript:

底部菜单

有Lable,进度条,菜单。

4、ToolStrip

工具条

5、ToolStripContainer

工具条容器

完!!

 

转载于:https://www.cnblogs.com/wwz-wwz/p/5898014.html

你可能感兴趣的文章
基于WordNet的英文同义词、近义词相似度评估及代码实现
查看>>
Equation漏洞混淆利用分析总结(上)
查看>>
shell学习1shell简介
查看>>
Qt 【无法打开 xxxx头文件】
查看>>
JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)
查看>>
三层架构(我的理解及详细分析)
查看>>
Django模板语言相关内容
查看>>
前端开发工程师如何在2013年里提升自己【转】--2016已更新升级很多何去何从?...
查看>>
markdown语法测试集合
查看>>
running and coding
查看>>
实现QQ第三方登录、网站接入
查看>>
HTML CSS 层叠样式表 三
查看>>
Qt pro pri 文件学习1
查看>>
软件工程概论第六周学习进度条
查看>>
[思路]导入导出功能
查看>>
【iOS】UICollectionView自己定义Layout之蜂窝布局
查看>>
golang——(strings包)常用字符串操作函数
查看>>
发布aar到jcenter
查看>>
跨浏览器问题的五种解决方案
查看>>
XPath定位时,使用文本的方法小技巧。
查看>>