• 多窗体,构造函数传值,打开唯一窗体的办法/菜单 工具栏


    多窗体:
    1、哪个是主窗体
    问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了
    
    
    
    
     Form2:---
    Form1 F1 = null;
            public Form2(Form1 f1)
            {
                InitializeComponent();
    
                F1 = f1;
            }
    
    Form1:---
                Form2 f2 = new Form2(this);
                f2.Show();
                this.Hide();
    
    点击1登录到2 ,1消失 。 关闭2,  12 都消失
    
    
        1、构造函数传值,将窗体传到另一个窗体中去
    
         用Form2 窗体属性里的 Fromclosing  双击进去  F1.Close(); 关闭主窗体F1
    
         窗体属于顶级控件,不能被放在其他容器里
    
    
    
    
    2、窗体只能打开一个
    
        创建一个全局的泛型集合,为了放置全部打开的窗体
    
             List<Form> Flist = new List<Form>();
    
        1、在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了
    
    
                bool has = false;
                Form2 f2 = new Form2();
                foreach (Form F in Flist)
                {
                    if (F.Name == f2.Name)
                    {
                        has = true;
                    }
                }
                if (has)
                {
    
                }
                else
                {
                    Flist.Add(f2);
                    f2.Show();
                }
    
    
        问题:当窗体打开了,关闭后,就无法再次打开了
        办法:当窗体关闭时,清除Form1中集合中的此窗体对象记录
    
    
    form1: 
       public void DelectForm(Form F)
            {
                Flist.Remove(F);//移除
            }
    
    
    form2:
     public partial class Form2 : Form
        {
            Form1 F1 = null;
            public Form2( Form1 f1)
            {
               
                InitializeComponent();
                F1 = f1;
            }
        
    
     private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (F1 != null)
                {
                    F1.DelectForm(this);
                }
            }
    
    
        问题:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入
        办法:
        找到已打开对象,将WindowState属性设置为:Normal
        找到已打开窗体的对象,使用Focus方法;F.Focus
    
           最小化,也弹出, 焦点进入
    
          F.WindowState = FormWindowState.Normal;
    
    
    
    
    
    
    3、窗体之间的传值和控制
    
    传值:构造函数传值
    
    
    form1:
     private void button1_Click(object sender, EventArgs e)
            {
                if (textBox1.Text == "liuxin" && textBox2.Text == "1234")
                {
                    Form2 f2 = new Form2(this,textBox1.Text );
    
    
                    f2.Show();
                    this.Hide();
    
    form2:
    public partial class Form2 : Form
        {
            Form1 F1 = null;
            public Form2(Form1 f1,string Uname)
            {
                InitializeComponent();
                F1 = f1;
                label1.Text = "欢迎回来"+Uname;
            }
        }
    
    
    控制:第一步,找到窗体对象,第二步,将窗体对象的控件值更改
            注意:要将窗体中的对象访问权限修改
    
     访问权限修改为 public
    
      F1.button1.Text = textBox1.Text;
    
    
    4、提示框类型的窗体
    
    ShowDialog();
    
    作用:点开第二个窗体 不关闭 不能点上一个窗体
    
    
     Form2 f2 = new Form2(this,"111");
                f2.ShowDialog();
    
    
    
    TabIndex 更改数字 按数字大小 依次用tab 往下走
    TabStop  到某个上面停止
     窗体--
       杂项--
        Acc.....Button  -- 选择按钮 用回车启动
        Can.....Button  -- esc启用  取消








     

    ------------------------------------------------------
    菜单和工具栏:

    1. MenuStrip --顶部菜单

    分割线1. “-”号 ,2. 右键 插入 split

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

    2、ContextMenuStrip:
    右键菜单 每个控件都可以有右键菜单

    3、StatusStript:
    底部菜单

    4、ToolStrip
    工具条

    5、ToolStripContainer
    工具条容器 四边 移动





    
    
     
     

     

  • 相关阅读:
    正则表达式判断手机号是否11位
    php-流程管理(发起流程和审核流程)
    php-流程管理(新建流程)(php+Ajax)
    php-人员权限管理(RBAC)
    状态压缩DP
    树形DP
    Broken Keyboard UVA 11988 数组实现链表
    Trees in a Wood UVA
    POJ1061 青蛙的约会 拓展欧几里得
    UVA10215The Largest/Smallest Box(小数精度)
  • 原文地址:https://www.cnblogs.com/power8023/p/5896521.html
Copyright © 2020-2023  润新知