• 多窗体切换


    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方法后,直到关闭对话框后,才执行此方法后面的代码

  • 相关阅读:
    常用工具篇(二)死链接扫描工具–Xenu
    基于python的性能测试工具–locust
    AppServ 8.0 的php 5.6 切换到 php7.0 方法
    toString()和toLocaleString() 的区别
    解决Nginx无法重启问题
    解决 AppServ8.0 安装好之后数据库登陆不上的问题
    TCP/IP 协议
    pc端登陆多个微信
    阿里云服务器创建宝塔面板教程
    轻松免费将你的家庭版windows10升级到windows10专业版
  • 原文地址:https://www.cnblogs.com/xiaobao5161/p/5896213.html
Copyright © 2020-2023  润新知