一、布局:单击任意控件,在属性的布局里面有两个重要属性
(1)Anchor:锁定位置,上下左右可以选择锁定位置
(2)Dock:填充位置 ,一般Dock是与容器控件配合使用
-----------------------------------------------------------------------------------------------------
二、容器控件:
(1)Panel:就是一个区域,类似于DIV,可以独立布局,还可以让其它控件及容器在它的内部再次布局
(2)FlowLayoutPanel:流式布局容器,内容会默认从左向右排列,如果宽度不够了,那么自动换行
(3)GroupBox:依然是容器,拥有Panel全部属性,比Panel多了个标题和边框样式
(4)TabControl:选项卡容器
(5)SplitContainer:二分区容器,可以进行嵌套使用
(6)TableLayoutPanel:表格容器
每个单元格只能放一个控件,要想多放几个,可以用Panel,在单元格内放上一个Panel,然后在Panel里面可以放多个控件,可以设置点击事件
-------------------------------------------------------------------------------------------------------------------------------------------
三、打印控件:
(1)PrintDocument:要打印的对象,非常重要
程序不知道你要打印什么东西,它只会去找这个要打印的对象
你所要做的事情,就是将要打印的内容绘制到这个打印对象上去
(2)PageSetupDialog:打印设置对话框
(3)PrintPreviewControl:打印预览控件,但是里面的字体看不清所以不太常用
(4)PrintPreviewDialog:打印预览对话框,可以调节大小,常用
(5)PrintDialog:打印对话框
//DialogResult是一个可被实例化的枚举类,用来接收用户在对话框中的操作
DialogResult dr = printDialog1.ShowDialog();
if (dr == DialogResult.OK)//如果用户点击的是确定按钮,那么执行打印
{
printDocument1.Print();
}
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; using System.Drawing; namespace 容器布局_打印控件 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void 打印设置ToolStripMenuItem_Click(object sender, EventArgs e) { //让pageSetupDialog1的属性Document指向printDocument1 pageSetupDialog1.Document = printDocument1; //显示一个对话框,允许用户更改与页面相关的打印设置,并且设置为Dialog样式,当前窗体不关闭其他窗体不能进行操作 pageSetupDialog1.ShowDialog(); } private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Font f=new Font("黑体",18);//设置Font,字体,大小 SolidBrush b = new SolidBrush(Color.Black);//设置刷子,用什么样的刷子来绘制内容,SolidBrush实线画刷 //printDocument要打印的对象,相当于一个画布,把要打印的东西画在画布上,对画布进行设置操作,打印画布的内容 //绘制画布,用到命名空间"System.Drawing"在上面引用 e.Graphics.DrawString(textBox1.Text, f, b, 10, 10);//绘制字符串(要绘制的字符串,字体,画刷,坐标) } private void 打印预览VToolStripMenuItem_Click(object sender, EventArgs e) { printPreviewControl1.Document = printDocument1; printPreviewDialog1.Document = printDocument1; printPreviewDialog1.ShowDialog(); } private void 打印PToolStripMenuItem_Click(object sender, EventArgs e) { printDialog1.Document = printDocument1; DialogResult dr = printDialog1.ShowDialog();//DialogResult枚举类 //判断一下 if (dr == DialogResult.OK)//如果用户点击的是OK,确认打印 { printDocument1.Print(); } } } }
--------------------------------------------------------------------------------------------------------------------------------------------------------------
四、对话框控件:
(1)colorDialog - 颜色选择对话框
private void 字体颜色ToolStripMenuItem_Click(object sender, EventArgs e) { //设置变量接收 colorDialog1.ShowDialog() DialogResult dr = colorDialog1.ShowDialog(); //判断 if (dr == DialogResult.OK)//如果点击确定 { //改变字体颜色,让textBox1的前景色(ForeColor)等于传回来的颜色colorDialog1.Color textBox1.ForeColor = colorDialog1.Color; //也可以任意改变其他的颜色,例如改变底部菜单Lable的背景色 toolStripStatusLabel1.BackColor = colorDialog1.Color; } }
(2)folderBrowserDialog - 文件路径选择对话框
绝对路径:带盘符的 G: 720...复制到资源管理器里面可以直接找到
相对路径:根据你当前程序的目录下,找到某个文件夹 /css/css1.css,复制到资源管理器里面找不到,在Web端用的多
private void 选择文件夹ToolStripMenuItem_Click(object sender, EventArgs e) { folderBrowserDialog1.ShowDialog(); //显示出获取或设置用户选择的文件路径 toolStripStatusLabel1.Text = folderBrowserDialog1.SelectedPath; }
(3)fontDialog - 字体选择对话框
private void 字体设置ToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult dr = fontDialog1.ShowDialog(); if (dr == DialogResult.OK) { textBox1.Font = fontDialog1.Font; } }
注:a、若果要在字体设置里面直接更改字体颜色,那么就在fontDialog的属性里面把ShowColor改为True
b、ShowApply 是否显示“应用”按钮
private void 字体设置ToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult dr = fontDialog1.ShowDialog(); if (dr == DialogResult.OK) { fontDialog1.ShowDialog();//显示一下看看是什么样式 textBox1.Font = fontDialog1.Font;//更改字体 //如果要直接在字体设置里面改变字体颜色,那么就要在窗体中改变ShowColor属性,代码中增加以下代码 textBox1.ForeColor = fontDialog1.Color;//更改字体颜色 } }
(4)openFileDialog - 打开文件对话框
openFileDialog1.Filter = "文本文件.txt|*.txt|视频文件|*.avi|所有文件|*.*";
注:在打开文件要显示文件里面的文本内容时需要用到“流”
流:IO
StreamReader - 读取流 sr.ReadToEnd();
StreamWriter - 输出流 sw.Write(要输出的内容);
private void 打开OToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult dr = openFileDialog1.ShowDialog(); if (dr == DialogResult.OK) { //show(显示)之前设置显示文件的格式,这样想查看什么格式的文件就会显示什么样的文件 //竖杠前面是给用户看的,竖杠后面是给程序看的, openFileDialog1.Filter = "文本文件.txt|*.txt|视频文件|*.avi|所有文件|*.*"; //让选择的文件路径在toolStripStatusLabel1上显示 toolStripStatusLabel1.Text = openFileDialog1.FileName; //在打开文件要显示文件里面的文本内容时需要用到“流”, //没有命名空间需要解析 using System.IO; StreamReader sr = new StreamReader(openFileDialog1.FileName,System.Text.Encoding.Default); textBox1.Text = sr.ReadToEnd();//从当前读到结尾,读取出来的数据是乱码,需要在上一句给增加一个参数 System.Text.Encoding.Default,规定一个默认编码 sr.Close();//数据读取玩之后必须关闭流,因为通道只有一个,不关闭的话下次打不开 } }
(5)saveFileDialog - 保存文件对话框
1、问题1:打开保存,文件名处没有默认的文件名
办法:在show之前给saveFileDialog1.FileName赋值,这样保存时,文件名处就会显示默认文件名
2、问题2:如果我已经保存过了,那么在次保存不需要弹出对话框,而是直接执行保存就可以。
办法:定义一个字符串类型的路径“string path = "";”判断保存路径是否为空,空直接保存,不是空保存至之前的文件路径
//已经保存过的文件,再次保存不需要弹出对话框,而是直接执行保存就可以。 string path = "";//path路径 private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) { //先判断path是否是空的 if (path == "")//若果路径为空说明之前没有保存过那么就直接保存 { //在show之前给saveFileDialog1.FileName赋值,这样保存时,文件名处就会显示默认文件名 saveFileDialog1.FileName = "新建文件夹.txt"; DialogResult dr = saveFileDialog1.ShowDialog(); if (dr == DialogResult.OK) { toolStripStatusLabel1.Text = saveFileDialog1.FileName; //把输入的内容导出保存,这里不需要给他规定编码 StreamWriter sw = new StreamWriter(saveFileDialog1.FileName); sw.Write(textBox1.Text); sw.Close();//数据读取玩之后必须关闭流,因为通道只有一个,不关闭的话下次打不开 path = saveFileDialog1.FileName;//记录一下保存的文件名 } } else//如果path不为空说明之前保存过那么把保存到的文件名改成path即可 { StreamWriter sw = new StreamWriter(path); sw.Write(textBox1.Text); sw.Close();//数据读取玩之后必须关闭流,因为通道只有一个,不关闭的话下次打不开 } }