winform布局、打开唯一窗体、构造函数传值

(一)布局
1.属性:
  Dock 根据需要,占满区域
  dock属性的顺序是按照拖入窗体的顺序来排的
  Anchor 可以确定与窗体上下左右的位置,来控制空间
  lcaction 定位
2.容器(布局的时候一般都是先布局容器,在容器里面进行),容器里面可以放容器
  Panel 就相当于一个透明的div,是最基础的,其余的容器都是继承Panel,
  FlowLayoutPanel 流式布局的Panel
  GroupBox 也是一个Panel,多出了一个外部边框
  TabControl 选项卡
  SqlitContainer 分割容器
  Orientation 属性,水平垂直分割
  TableLayoutPanel 一个表格,每一个单元格只能放一个控件(里面可以放容器,然后再放多个控件)

(二)构造函数传值
1. 打开新窗体
  先实例化对象,对象.show();
2.窗体之间传值(构造函数传值)
例:
form1是登入窗体,form2是登入跳转窗体,实现:从1登入打开2,1隐藏,关闭2窗体,1窗体也随着关闭
form2中的代码:

复制代码
Form1 F1 = null;//定义form1
public Form2(Form1 f1)//利用构造函数传入form1对象
{
    InitializeComponent();
    F1 = f1;
}
//form2关闭的时候,关闭form1    
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    F1.Close();
}    
复制代码


3.打开唯一窗体
例:2个窗体,实现,在1打开2,且每次只能打开唯一,最小化之后在此点击按钮,焦点自动进入,且还原初始状态
窗体1中的代码:

  

复制代码
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
  InitializeComponent();
}
List<Form> list = new List<Form>();//定义一个集合,存在打开的窗体
private void button1_Click(object sender, EventArgs e)
{
  Form2 f2 = new Form2(this);//将form1窗体传入form2
  bool has = false;//定义一个变量,
foreach(Form ff in list)
{
  if (ff is Form2) //判断
{
  has = true;
  f2 = ff as Form2;//将ff转换成form2
}


}
  if (has)//集合中有f2
{

  f2.WindowState = FormWindowState.Normal;//每次打开的时候窗体默认位置
  f2.Focus();//每次打开焦点进入

}
else
{
//集合中放入f2,并且打开
  list.Add(f2);
  f2.Show();

}
}
 //如果集合中有了窗体之后,在移除向对应的,如果不移除,关闭之后,集合中以后,就打不开新窗体了
public void delete(Form f) 
{
  list.Remove(f);
}
}
}
复制代码

窗体2中的代码:

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
    Form1 F1 = null;//定义变量接收f1
public Form2(Form1 f1)
{
    InitializeComponent();
    F1 = f1;
}
//关闭的时候移除对应的窗体,下次继续打开,否则关闭之后打不开
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    F1.delete(this);
}

}
}
复制代码
原文地址:https://www.cnblogs.com/weiyu11/p/6802133.html