zoukankan      html  css  js  c++  java
  • 多窗体及菜单

    1、哪个是主窗体

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

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

    子窗体中的写法

    public partial class Form2 : Form
    {
    Form1 F1 = null;
    public Form2(Form1 f1)
    {
    InitializeComponent();
    F1 = f1;
    }

    2、窗体只能打开一个

    创建一个全局的泛型集合,为了放置全部打开的窗体
    1、在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了

    问题:当窗体打开了,关闭后,就无法再次打开了
    办法:当窗体关闭时,清除Form1中集合中的此窗体对象记录

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

    主窗体中的写法:

    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == "xtq" && textBox2.Text == "1234")//如果输入的账号和密码正确则登录
        {
        bool has = false;
        Form2 f2 = new Form2(this);
        foreach (Form f in flist)
            {
            if (f.Name == f2.Name)//如果新打开的窗口的name值和现在打开的窗口的name值相等的话什么也不干
                {

                  has = true;
                  f.WindowState = FormWindowState.Normal;
                  f.Focus();

                }
            }
        if (has)
        {

          f2.Close();

        }
        else//两者的name值不等的话把f2放到集合中去,并显示子窗口
        {
        flist.Add(f2);
        f2.Show();
        }

    }

    public void deleteform(Form F)//清除Form1中集合中的此窗体对象记录的方法
    {
    flist.Remove(F);
    }

    子窗体中的写法:

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        F1.Close();
        if (F1 != null)
        {
        F1.deleteform(this);//调用主窗体中的delete方法
        }
    }

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

    传值:构造函数传值

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

    主窗体中的写法:

    public partial class Form1 : Form
    {
        public Form1()
        {
        InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
             if(textBox1.Text=="aaa"&&textBox2.Text=="111")
             {
              Form2 f2 = new Form2(this,textBox1.Text);
              f2.ShowDialog();
             }
         }
    }

    子窗体中的写法:

    public partial class Form2 : Form
    {
        Form1 F1 = null;
        public Form2(Form1 f1,string uname)
        {
        InitializeComponent();
        F1 = f1;
        label1.Text = "欢迎回来!"+uname;
        }


        private void button1_Click(object sender, EventArgs e)
        {

            if(F1!=null)
            {
            F1.button1.Text = textBox1.Text;//使子窗体中的button按钮使用的时候会把其text赋值到主窗体中button的text
            }
        }
    }

     4、菜单

    1、MenuStrip:菜单栏,显示按功能分组的应用程序命令和选项
    顶部菜单
    分割线:1、- 2、右键插入 split。。。

    快捷键:每一个项右键属性的最下面可以设置快捷键
    不管选项隐藏还是菜单隐藏,快捷键都管用

    2、ContextMenuStrip:当用户右击关联控件时显示快捷菜单
    右键菜单

    3、StatusStript:就像是窗口底部的菜单栏
    底部菜单

    4、ToolStrip提供多种外观选项和和溢出以及运行时的工具栏
    工具条

    5、ToolStripContainer在每侧窗体都有一块面板,用于放置各种控件
    工具条容器

  • 相关阅读:
    很长的下拉框菜单
    Pure CSS Buttons – Good Button Style and No Images
    ssh 配置
    php大量session存储到内存中,散列及过期回收
    array_append_distinct, array_erase函数
    关于C# 中的Attribute 特性(转载)
    Jquery如何操作Table的某一个td
    ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期
    ASP.NET应用程序生命周期趣谈(五) IIS7瞎说
    ASP.NET应用程序生命周期趣谈(三)
  • 原文地址:https://www.cnblogs.com/xtq0313/p/5896565.html
Copyright © 2011-2022 走看看