zoukankan      html  css  js  c++  java
  • WinFormd多窗体 菜单和工具栏:

    一、多窗体

    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();
            }
        }
    }
    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
    工具条容器

    完!!

  • 相关阅读:
    IntelliJ IDEA(十) :常用操作
    IntelliJ IDEA(九) :酷炫插件系列
    IntelliJ IDEA(八) :git的使用
    IntelliJ IDEA(七) :Project Structure
    IntelliJ IDEA(六) :Settings(下)
    IntelliJ IDEA(五) :Settings(中)
    Echo中间件使用
    Makefile
    swag-ui与swag-edit
    mysql 连接数太多
  • 原文地址:https://www.cnblogs.com/wwz-wwz/p/5898014.html
Copyright © 2011-2022 走看看