多窗体及菜单

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在每侧窗体都有一块面板,用于放置各种控件
工具条容器

posted @ 2016-09-22 15:28  Angel落痕  阅读(155)  评论(0编辑  收藏  举报