zoukankan      html  css  js  c++  java
  • winform(多窗体、菜单和工具栏)

    一、多窗体

    1、哪个是主窗体

    利用From1的button将From2打开

    private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.Show();
                this.Hide();//打开From2时,隐藏From1
            }

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

    (1)、构造函数传值,将窗体传到另一个窗体中去

     首先打开From2代码,并选择事件FormClosing

    Form1 F1 = null;
            public Form2(Form1 f1)
            {
                InitializeComponent();
                F1 = f1;
            }
    
            private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                F1.Close();
            }

    然后将From1中的 Form2 f2 = new Form2();改为Form2 f2 = new Form2(this);

    2、窗体只能打开一个

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

    List<Form> flist = new List<Form>();
    (1)、在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了

    将From1中button1的点击事件改为

    bool has=false;//From2是否已被打开一次
                Form2 f2 = new Form2(this);
                foreach(Form F in flist) 
                {
                if(F.Name==f2.Name)
                {
                    has = true;
                }
                }
                if (has)
                { }
                else
                {
                    flist.Add(f2);
                    f2.Show();
                }

    问题:当窗体打开了,关闭后,就无法再次打开了
    办法:当窗体关闭时,清除Form1中集合中的此窗体对象记录
    首先在from 1添加一个函数

     public void deleteFrom(Form F)
            {
                flist.Remove(F);
            }

    然后在From2的FormClosing事件中改为

    if(F1!=null)
                {
                    F1.deleteFrom(this);
                }

    问题:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入
    办法:
    找到已打开对象,将WindowState属性设置为:
    找到已打开窗体的对象,使用Focus方法;

    在From1中button1的点击事件中if(has){}中添加“ f2.Close();”,它起到释放内存的作用

    if(F.Name==f2.Name){has = true;}true;后添加F.WindowState = FormWindowState.Normal;//最小化或最大化时点击按钮恢复正常大小
    F.Focus();//焦点进入

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

    传值:构造函数传值

    将From2的构造函数改为

    public Form2(Form1 f1,string uname)
    {
    InitializeComponent();
    F1 = f1;

    label1.Text = "欢迎回来," + uname;
    }

    在From1中改为  Form2 f2 = new Form2(this,textBox1.Text);

    控制:第一步,找到窗体对象,第二步,将窗体对象的控件值更改
    注意:要将窗体中的对象访问权限修改为public:

    在From2中添加新建一个按钮和文本框,点击此按钮的点击事件,添加if(F1!=null){F1.button1.Text=Textbox1.Text}
    4、提示框类型的窗体

    ShowDialog();

    修改地方:

     Form2 f2 = new Form2(this,textBox1.Text);
                f2.ShowDialog();

    作用:

    将窗体显示为模式对话框。 在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码

     二、菜单和工具栏

    1、MenuStrip:
    顶部菜单,可右键点击插入标准项
    分割线:1、- 2、右键插入Separator

    快捷键:每一个项右键属性最下面ShortcuKeys可以设置快捷键,ShowShortcuKeys是否在该项上显示快捷键
    不管选项隐藏还是菜单隐藏,快捷键都管用

    2、ContextMenuStrip:
    右键菜单

    在属性 行为上ContextMeunStrip选择您要关联右键菜单,即可使用右键菜单,每一个控件都可以关联右键菜单

    3、StatusStript:
    底部菜单

    4、ToolStrip
    工具条

    5、ToolStripContainer
    工具条容器

  • 相关阅读:
    C#.NET.JSON库
    C# .NET 私钥 RSA2,SHA256,签名
    fiddler 捕捉不到代码发出去的HTTP请求
    双网卡共享上网
    json 反序列化成键值对
    C# .NET 杀进程
    docker in centos error
    深入理解磁盘文件系统之inode
    CentOS下安装高版本GCC
    Mac 使用 launchctl 定时运行程序(转载)
  • 原文地址:https://www.cnblogs.com/1711643472qq/p/6058991.html
Copyright © 2011-2022 走看看