zoukankan      html  css  js  c++  java
  • 多窗口切换传值,菜单,工具栏

    在form1中打开form2:
    private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); this.Hide();//打开From2时,隐藏From1 }
    这样出现这样一个问题:在打开form2的时候form1隐藏了,也就无法再将form1关闭,会在后台一直运行。
    解决方案:构造函数传值,在关闭form2的时候也同时将form1关闭。

    Form1 F1 = null;
    public Form2(Form1 f1)//构造F1
    {
    InitializeComponent();
    F1 = f1;
    }

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)//FormClosing,在F2关闭之前先执行一遍函数内容(F1.Close();)
    {
    F1.Close();
    }

    这样无法解决可以从form1打开多个form2的问题

    需要创建一个泛型集合,将所有打开的form2添加到集合中,如果集合中已经存在form2,就不再打开,如果没有才打开

    bool has=false;//设置变量来判断From2是否已被打开一次
                Form2 f2 = new Form2(this);
                foreach(Form F in flist) //遍历集合里是否有f2
                {
                if(F.Name==f2.Name)
                {
                    has = true;
                }
                }
                if (has)
                { }
                else  //如果没有,添加进集合
                {
                    flist.Add(f2);
                    f2.Show();
                }
    这样发现将f2添加进集合里之后has便一直为true,也就是打开form2之后无法将其打开,所以在窗体关闭时要将集合里的属性数据清除。
    这时候form1中添加一个函数
    public void DeleteFrom(Form F)
            {
                flist.Remove(F);
            }
    
    
    

      然后再在form2中调用

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (F1 != null)
                {
                    F1.DeleteForm(this);
                }
            }
    

     焦点移入问题

    在From1中button1的点击事件中if(has){}中添加“ f2.Close();”,它起到释放内存的作用

    if(F.Name==f2.Name){has = true;}true;后添加F.WindowState = FormWindowState.Normal;//最小化或最大化时点击按钮恢复正常大小
    F.Focus();//焦点进入


    窗体之间传值

    将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
    工具条容器

  • 相关阅读:
    HDU Problem 1811 Rank of Tetris【拓扑排序+并查集】
    POJ Problem 2367 Genealogical tree【拓扑排序】
    HDU Problem 2647 Reward【拓扑排序】
    HDU Problem 1285 确定比赛名次【拓扑排序】
    HDU Problem HDU Today 【最短路】
    HDU Problem 3665 Seaside【最短路】
    HDU Problem 一个人的旅行 【最短路dijkstra】
    HDU Problem 1596 find the safest road【最短路dijkstra】
    Beyond Compare文本合并进行内容替换要注意什么
    用这些工具都可以比较代码的差异
  • 原文地址:https://www.cnblogs.com/lanrenqilanming/p/5898359.html
Copyright © 2011-2022 走看看