-
自适应窗口布局:OnLayout()
注意: 1. Size是指整个窗口的大小, ClientSize是窗口的用户区域大小
2.有些控件的尺寸是被锁住的,比如textBox的高度。
效果展示:
//窗体随页面拉动变大变小
protected override void OnLayout (LayoutEventArgs levent){
//1.调父类的onLayout(),不是必需的
base. OnLayout (levent) ;
//2.获取窗口大小clientsize(仅客户区,不含标题栏)
int w = this. ClientSize. Width;
int h = this. ClientSize. Height;
//3.计算每-一个控件的位置和大小
int yoff = 0;
yoff = 4;
this. textBox1. Location = new Point(0,yoff);|
this. textBoxl.Size = new Size(w-80,40) ;
this. button1. Location = new Point(w - 80,yoff) ;
this. button1.Size = new Size(80,40) ;
yoff += 40;//第一行的高度
yoff += 4;//间隔
this. pictureBoxl. Location = new Point(0, yoff) ;
this. pictureBoxl.Size = new Size(w,h - yoff - 4) ;
}
2. 锚点固定
3. Dock栏
用dock方式设置了一个典型的布局
注意:锚点Anchor和Dock不能同时设置,设置Dock属性后,Anchor属性就会失效
4.自定义布局器:LayoutEngine()
5.流式布局:FlowLayoutPanel
注意:flowLayoutPanel至少一个面板,它并不是一个布局器,但是它内部默认实现了一个布局器
6.表格布局:TableLayoutPanel
7.DockLayout
DockLayout:是对默认Dock布局的优化版
8.常用的控件
8.1 TextBox 文本框控件
textBox.AutoSize = false;//也可以在属性栏中设置,当为true时,文本框会自己计算所需大小
textBox.Height = 40;
Name:变量名
Text:文本
Font:字体
KeyPress:按键事件,常用于文本框输入完成后,用户回车触发处理
private void TestKeyPress(object sender, KeyPressEventArgs e)
{
char keyChar = e.KeyChar;
if (keyChar == '\r')
{
string text = textBox1.Text;
MessageBox.Show(text, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
8.2 CheckBox 复选框
Text : 文本显示
Checked : √/否
Click:点击动作
CheckedChanged :选中状态发生变化
//复选框状态变化世家
private void TestPassWordCheckChanged(object sender, EventArgs e)
{
bool che = checkBox1.Checked;
if (che)
{
textBox1.PasswordChar = '\0';
}
else {
textBox1.PasswordChar = '*';
}
}
注意:
区分Click和CheckedChanged两种事件
Click:用户手动点击
CheckedChanged :状态值发生变化,可能是用户点击,也可能是程序代码改变了这个值
例如:
checkBox1.Checked = true;
8.3 comboBox 下拉列表
属性|数据|Items
public Form1()
{
InitializeComponent();
//注意:必须写在这个类的构造方法这个位置才会生效
comboBox1.Items.Clear();
comboBox1.Items.Add("张三");
comboBox1.Items.Add("李四");
comboBox1.Items.Add("王五");
comboBox1.SelectedIndex = 0;//默认选中下标为0的选项
}
//选中后,点击按钮触发按钮绑定的事件,编译模式下控制台输出,选中的选项
private void button1_ Click (object sender,EventArgs e)
{
// selectedItem :选中项的值,null表示未选中
// selectedIndex :选中项的索引,-1表示未选中
int index = comboBox1. SelectedIndex;
string sel = (string) comboBox1. SelectedItem;
Console. WriteLine ("选中了:”+ sel) ;
}
comboBox1.SelectedIndex = 0;//默认选中下标为0的选项
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("现在选中的是"+comboBox1.SelectedItem);
}
8.4 ListBox列表框
8.5 (练习)学生信息编辑
1界面布局
2保存功能
3加载功能
8.6 CheckListBox 多选框
DataSource DisplayMember ValueMember4.事件: SelectedIndexChangedItemCheck
9.图片
10.启动后台工作支线程:backgroundWorker
在希望向主线程汇报进度的时候,调用 backgroundWorker1.ReportProgress(i);方法。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//开启跨线程修改UI界面(不推荐使用,不安全),默认为true
//CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "开始")
{
backgroundWorker1.RunWorkerAsync();
button1.Enabled = false;
}
}
//1、开启异步后台运行时,自动做的工作
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
for (int i = 1; i < 101; i++)
{
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
//方法一:
//使用Invoke方式跨线程直接修改UI界面
//Invoke(() => {
// progressBar1.Value = i;
//});
//方法二:
//进程改变处理函数,汇报进度(以供backgroundWorker1_ProgressChanged()时间获取后台DoWork进度)
backgroundWorker1.ReportProgress(i);
}
}
//1、获取后台汇报的进度,在主线程中执行
private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;//获取后台工作汇报的进度
}
//3、后台工作运行结束后开启的事件
private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
MessageBox.Show("后台工作执行完毕");
button1.Enabled = true;
progressBar1.Value = 1;
}
}
11、DataGripView : 数据单元格
public partial class Form2 : Form{
public Form2(){
InitializeComponent();
//一次选择一整行
dgv1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
//去掉表格最下面的空白行
dgv1.AllowUserToAddRows = false;
//设置是否可以多选
dgv1.MultiSelect = false;
//行头是否隐藏
dgv1.RowHeadersVisible = false;
var style = dgv1.RowsDefaultCellStyle;
//行的背景颜色
style.BackColor = Color.AliceBlue;
//行的字体颜色
style.ForeColor = Color.Blue;
//设置选中行的背景颜色
style.SelectionBackColor = Color.Red;
}
private void Form2_Load(object sender, EventArgs e){
dgv1.Columns.Add("id", "编号");
dgv1.Columns.Add("name", "姓名");
dgv1.Columns.Add("age", "年龄");
dgv1.Columns.Add("sex", "性别");
for (int i = 0; i <= 100; i++) {
if (i == 0){
dgv1.Rows.Add(i, "王一", 20, "男");
}
else if (i % 2 == 0){
dgv1.Rows.Add(i, "李二", 21, "男");
}
else if (i % 2 == 1) {
dgv1.Rows.Add(i, "刘思思", 18, "女");
}
}
}
private void dgv1_SelectionChanged(object sender, EventArgs e){
DataGridViewSelectedRowCollection srs = dgv1.SelectedRows;
DataGridViewRow row = srs[0];
if (row != null){
textBox1.Text = row.Cells[0].Value.ToString();
textBox2.Text = row.Cells[1].Value.ToString();
textBox3.Text = row.Cells[2].Value.ToString();
textBox4.Text = row.Cells[3].Value.ToString();
}
}
}