• 多窗口切换传值,菜单,工具栏


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

  • 相关阅读:
    html5基础---canvas
    html5基础---h5特性
    JS常用知识点(一)
    微信小程序开发(一)基础知识学习
    关于C# winform唤起本地已安装应用程序(测试win10,win7可用)
    js原型链结构理解
    JS闭包应用场景之函数回调(含函数的调用个人理解)
    (十三)MySQL锁机制
    (十一)MVCC-多版本并发控制机制(转)
    jvm014-垃圾回收器
  • 原文地址:https://www.cnblogs.com/lanrenqilanming/p/5898359.html
Copyright © 2020-2023  润新知