一、多窗体

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<Form> flist = new List<Form>();//建立全局泛型集合,看看是否有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();
}
}
}
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();
}
}
}

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
工具条容器

完!!

WinFormd多窗体 菜单和工具栏:的更多相关文章

  1. winform(多窗体、菜单和工具栏)

    一.多窗体 1.哪个是主窗体 利用From1的button将From2打开 private void button1_Click(object sender, EventArgs e) { Form2 ...

  2. 【2017-04-25】winform公共控件、菜单和工具栏、Tab和无边框窗体制作

    一.公共控件 1. Button   按钮 + 布局 - AutoSize   按钮尺寸自动适应里面内容的长度 - Location    位置 - Margin       控件与控件外边距 - S ...

  3. WinForm 菜单和工具栏

    菜单和工具栏: 1.MenuStrip:顶部菜单 优先级最高,默认在最顶部 (1)分割线:a.打一个减号 “-”                   b.右键插入Separator (2)点击事件:每 ...

  4. 【2017-04-25】winform公共控件、菜单和工具栏

    一.公共控件 公共控件很多的属性很多都相似,这些是大部分都相同的: +布局 - AutoSize:自动适应控件上文字内容- Location:位置- Margin:控件间的间距- Size:控件大小 ...

  5. PyQt5教程——菜单和工具栏(3)

    PyQt5中的菜单和工具栏 在这部分的PyQt5教程中,我们将创建菜单和工具栏.菜单式位于菜单栏的一组命令操作.工具栏是应用窗体中由按钮和一些常规命令操作组成的组件. 主窗口 QMainWindow类 ...

  6. WinForm菜单和工具栏

    菜单和工具栏: 1.MenuStrip - 顶部菜单栏分割线:1输入- 2.右键插入 |SpearTOR 快捷键设置:每一个项右键属性的最下面可以设置快捷键不管选项隐藏还是菜单隐藏,快捷键都管用 2. ...

  7. Windows系统:桌面,开始菜单和工具栏都不见了

    win7桌面,开始菜单和工具栏都不见了 ctrl+alt+del 打开任务管理器 然后文件-运行 ---  输入框里输入  explorer.exe 其实就是打开系统文件夹下的(大约是‘windows ...

  8. WPF学习(二)布局与菜单、工具栏

    布局 //表格①Grid//3列 4行的表格   <Grid>    <Grid.ColumDefinitions>             <ColumnDefinti ...

  9. Qt中实现菜单和工具栏功能

    Qt创建菜单和工具栏: 一.  temp.h文件的内容 1.定义类temp继承QMainWindow 2.添加Q_OBJECT , 构造函数 . 析构函数等内容 3.$重点内容 3.1定义QActio ...

随机推荐

  1. [转] JVM 调优系列 & 高并发Java系列

    1.JVM调优总结(1):一些概念:http://www.importnew.com/18694.html 2.JVM调优总结(2):基本垃圾回收算法:http://www.importnew.com ...

  2. Java基础(10):java基础第一部分综合测试题,成绩合法性校验与排序

    题目: 编写一个 JAVA 程序,实现输出考试成绩的前三名 要求: 1. 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 64 , 91 , 119 , 52 , 73 ...

  3. java中hashCode()方法的作用

    hashcode方法返回该对象的哈希码值.      hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先 ...

  4. 夺命雷公狗—angularjs—14—$location的作用

    废话不多说看下,我们直接来走代码看下效果如何 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. python入门语法总结 zz

    http://renjie120.iteye.com/blog/680126 1.python是一个解释性语言: 一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计 ...

  6. 7. 星际争霸之php设计模式--中介者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  7. [软件推荐]转换html到chm的软件,winchm pro

    之前使用teleport pro抓取过好几个网站的内容,网页文件都是在一个文件夹里,但是转换成chm格式的会方便一些. 用过一款软件叫easychm,是国人开发的.但是没注册的版本会在生成的文件中自动 ...

  8. [PHP100]留言板(一)

    [实例]我的留言板 ** 文件结构: conn.php // 数据库配置 add.php // 操作文件 list.php //列表文件 ** 步骤 建立数据库: phpmyadmin: 建立数据库( ...

  9. StringTokenizer类

    StringTokenizer是一个用来分隔String字符串的应用类. 1.构造函数 public StringTokenizer(String str)  //构造一个用来解析str的String ...

  10. OpenMP的调度

    schedule(static, size) 这是静态调度,如果没有设置size, 默认是根据任务书来决定, 比如我电脑是8核,有26个任务,那么分配后结果是4 4 3 3 3 3 3 3. 因为先分 ...