多窗体、菜单和工具栏

一、多窗体

form1 打开form2

(1)不隐藏form1

Form2 f2 = new Form2();
 f2.Show();//打开Form2

(2)隐藏form1

this.Hide();

构造函数传值

(1)传窗体

Form1代码:

Form2 f2 = new Form2(this);
f2.Show();

Form2代码:

Form1 F1=null;//声明Form1
 public Form2(Form1 f1)//构造函数
  {
            InitializeComponent();
            F1 = f1;//将传进来的窗体赋给声明的值,这样才能在全局使用           
  }

(2)传普通值

Form1代码:

Form2 f2 = new Form2(textBox1.Text);
f2.Show();

Form2代码:

Form1 F1=null;//声明Form1
 public Form2()//构造函数
  {
            InitializeComponent();
textBox1.Text = uname + ",欢迎您回来!";                       
  }

关上form2form1也关闭

form2关闭时,触发FormClosing事件,从而执行里边的语句

 private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            F1.Close(); //关闭form1           
        }

提示框类型的窗体

不关闭这个类型的窗体其它窗体不能操作

将f2.Show();
改成f2.ShowDialog();

5  只显示一个窗体

Form1代码:

 List<Form> list = new List<Form>();//定义全局变量,泛型集合接收打开的窗体
private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "zhang" && textBox2.Text == "1234")
            {
                bool b = false;//布尔类型,判断Form2是否已经打开
                Form2 f2 = new Form2(this);//实例化Form2,创建出一个对象
                foreach (Form f in list)//遍历集合,看看是否已经打开Form2
                {
                    if (f.Name == f2.Name)//若集合中存在与Form2的name值相同的窗体
                    {
                        b = true;//true已经打开
                        f.WindowState = FormWindowState.Normal;//若最小化,让其正常显示
                        f.Focus();//将焦点移到Form2
                    }
                }
                if (b)
                {
                    f2.Close();//若已经有打开的,将这个新打开的关闭,节省内存
                }
                else
                {
                    list.Add(f2);//若没有打开的,将其添加到泛型集合
                    f2.Show();//打开Form2                   
                }                                               
            }
        }
        public void delete(Form f)//从集合中移除一个窗体
        {
            list.Remove(f);
        }

Form2代码

 Form1 F1=null;//声明Form1
 public Form2(Form1 f1)//构造函数
 {
            InitializeComponent();
            F1 = f1;//将传进来的窗体赋给声明的值,这样才能在全局使用          
  }
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
 {
                 F1.delete(this);//当关闭Form2时,调用Form1中定义的函数,删除集合中的Form2
 }

6 窗体控制

第一步,找到窗体对象,第二步,将窗体对象的控件值更改

注意:要将窗体中的对象访问权限修改

form2代码:
private
void button1_Click(object sender, EventArgs e) { if(F1!=null) { F1.button1.Text = textBox2.Text;//将form2中的值赋值给form1中的button1 } }

二、菜单和工具栏

1 MenuStrip 顶部菜单栏

1)插入标准项:在这个控件上右键--插入标准项;

2)分割线 :-  或 右键插入 Separator

3)快捷键:

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

ShortcutKeys 设置快捷键

ShowShortcutKeys 快捷键是否显示

2 ContextMenuStrip 右键菜单

每一个控件都可以设右键菜单,在控件行为中ContextMenuStrip属性

3 StatusStrip底部菜单

 可以放标签、进度条、菜单条

4 TooplStrip 工具条

5 TooplStripContainer 工具条容器 

可将工具条放入其中

原文地址:https://www.cnblogs.com/zhang-dandan-1/p/5897732.html