布局容器、打印控件

一、布局:单击任意控件,在属性的布局里面有两个重要属性

(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();//数据读取玩之后必须关闭流,因为通道只有一个,不关闭的话下次打不开
            }

        }



原文地址:https://www.cnblogs.com/juyangchao12/p/5899434.html