winform(多窗体菜单和工具栏)

Posted ☆☆☆☆☆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
工具条容器

以上是关于winform(多窗体菜单和工具栏)的主要内容,如果未能解决你的问题,请参考以下文章

WinForm多窗体间操作,ComboBox下拉菜单控件

C# winform程序,怎么实现菜单的功能?

C# winform程序,怎么实现菜单的功能

2017-04-25winform公共控件菜单和工具栏Tab和无边框窗体制作

WinForm基础

C# winform 学习知识转发