Visual C# 对话框全接触

VS.net bate 2出来也很久了,感觉还可以。早一阵子,朋友让我帮他写两个打印程序,当中用了不少的对话,在查资料的时候看到国 外有一篇专门的文章介绍对话框的,就决定写这篇文章,让大家都有个好的起点。同时还着重介绍了打印那一部份,大家可以仔细研究一下,都说了很多了。现 在我们开发吧!

  对话框中我们常用了以下几种:

  1、文件对话框(FileDialog) 它又常用到两个:

   打开文件对话框(OpenFileDialog)

   保存文件对话(SaveFileDialog)

  2、字体对话框(FontDialog)

  3、颜色对话框(ColorDialog)

  4、打印预浏对话框(PrintPreviewDialog)

  5、页面设置(PrintDialog)

  6、打印对话框(PrintDialog)

  还有更多,有时间的网友可以看看MSDN。下面我们一个个来介绍。在介绍的过程中我用到了一个自己开发的类:File,主要是文件操作的。 

  
文件对话框(FileDialog)

  一、打开文件对话框(OpenFileDialog)

  1、 OpenFileDialog控件有以下基本属性
InitialDirectory对话框的初始目录
Filter要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*"
FilterIndex在对话框中选择的文件筛选器的索引,如果选第一项就设为1
RestoreDirectory控制对话框在关闭之前是否恢复当前目录
FileName第一个在对话框中显示的文件或最后一个选取的文件
Title将显示在对话框标题栏中的字符
AddExtension是否自动添加默认扩展名
CheckPathExists
在对话框返回之前,检查指定路径是否存在
DefaultExt默认扩展名
DereferenceLinks在从对话框返回前是否取消引用快捷方式
ShowHelp
启用"帮助"按钮
ValiDateNames控制对话框检查文件名中是否不含有无效的字符或序列

  2、 OpenFileDialog控件有以下常用事件
FileOk当用户点击"打开"或"保存"按钮时要处理的事件
HelpRequest当用户点击"帮助"按钮时要处理的事件

  3、OpenFileDialog的效果如下:

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

  可以用以下代码来实现上面这个对话框:
复制C#代码保存代码
private void openFileDialogBTN_Click(object sender, System.EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.InitialDirectory = "c:\\";//注意这里写路径时要用c:\\而不是c:\
    openFileDialog.Filter = "文本文件|*.*|C#文件|*.cs|所有文件|*.*";
    openFileDialog.RestoreDirectory = true;
    openFileDialog.FilterIndex = 1;

    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        fName = openFileDialog.FileName;
        File fileOpen = new File(fName);
        isFileHaveName = true;
        richTextBox1.Text = fileOpen.ReadFile();
        richTextBox1.AppendText("");
    }
}

  其中有用到了File()这个类,是我在程序用来执行文件操作,自己写的,在最后附了这个类的源码。有兴趣的网友可以自己分析。

  二、保存文件对话框(SaveFileDialog)

  保存文件对话框控件有两种情况,一就是保存,二就是另存为,保存很简单,就是在文件已经打开的情况下的,再把文件写一篇,在这里我们主要讲另存为 的情况(SaveAs)。

  1,SaveFileDialog控件的属性
Filter要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"
FilterIndex在对话框中选择的文件筛选器的索引,如果选第一项就设为1
RestoreDirectory控制对话框在关闭之前是否恢复当前目录
AddExtension是否自动添加默认扩展名
CheckFileExists 
CheckPathExists
在对话框返回之前,检查指定路径是否存在
Container控制在将要创建文件时,是否提示用户。只有在ValidateNames为真值时,才适用。
DefaultExt缺省扩展名
DereferenceLinks
在从对话框返回前是否取消引用快捷方式
FileName第一个在对话框中显示的文件或最后一个选取的文件
InitialDirector对话框的初始目录
OverwritePrompt控制在将要在改写现在文件时是否提示用户,只有在ValidateNames为真值时,才适用
ShowHelp启用"帮助"按钮
Title将显示在对话框标题栏中的字符
ValidateNames控制对话框检查文件名中是否不含有无效的字符或序列

  2、SaveFileDialog事件如下:
FileOk当用户点击"打开"或"保存"按钮时要处理的事件
HelpRequest当用户点击"帮助"按钮时要处理的事件

  3、SaveFileDialog的效果如下:

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

  4、用下例代码可以实现
复制C#代码保存代码
private void saveAsDialogBTN_Click(object sender, System.EventArgs e)
{
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.Filter = "文本文件|*.*|C#文件|*.cs|所有文件|*.*";
    saveFileDialog.FilterIndex = 2;
    saveFileDialog.RestoreDirectory = true;

    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            fName = saveFileDialog.FileName;
            File fSaveAs = new File(fName);
            isFileHaveName = true;
        file://保存的文件有名字
            fSaveAs.WriteFile(richTextBox1.Text);
        }
    }
}

  其实这些都可以在VS.NET的IDE环境中直接完成,为了说明问题,我还是一条条列也来了。当中用到了一个File的类库,下面是源程序:

  File.cs
复制C#代码保存代码
using System;
using System.IO;
using System.Windows.Forms;
using System.Text;

namespace dialog
{
    /// 
    /// Summary description for File.
    /// 
    public class File
    {
        string fileName;
        public File(string fileName)
        {
            this.fileName = fileName;
        }

        public string ReadFile()
        {
            try
            {
                StreamReader sr = new StreamReader(fileName, Encoding.Default);
                string result = sr.ReadToEnd();
                sr.Close();
                return result;
            }
            catch (Exception e) { MessageBox.Show(e.Message); }
            return null;
        }

        public void WriteFile(string str)
        {
            try
            {
                StreamWriter sw = new StreamWriter(fileName, false, Encoding.Default);
                sw.Write(str);
                sw.Close();
            }
            catch (Exception e) { MessageBox.Show(e.Message, "保存文件出错!"); }
        }
    }
}


字体对话框(FontDialog)

  在文字处理中,我们常用到字体,现在我们来做一个最常见的字体对话框。

  一、 字体对话框(FontDialog)常用属性
ShowColor控制是否显示颜色选项
AllowScriptChange是否显示字体的字符集
Font在对话框显示的字体
AllowVerticalFonts是否可选择垂直字体
Color在对话框中选择的颜色
FontMustExist当字体不存在时是否显示错误
MaxSize可选择的最大字号
MinSize可选择的最小字号
ScriptsOnly显示排除OEM和Symbol字体
ShowApply是否显示"应用"按钮
ShowEffects是否显示下划线、删除线、字体颜色选项
ShowHelp是否显示"帮助"按钮

  二、 字体对话框(FontDialog)的事件
Apply当点击"应用"按钮时要处理的事件
HelpRequest当点击"帮助"按钮时要处理的事件

  三、 字体对话框(FontDialog)的效果

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

  四、 实现代码
复制C#代码保存代码
private void fontDialogBTN_Click(object sender, System.EventArgs e)
{
    FontDialog fontDialog = new FontDialog();
    fontDialog.Color = richTextBox1.ForeColor;
    fontDialog.AllowScriptChange = true;
    fontDialog.ShowColor = true;

    if (fontDialog.ShowDialog() != DialogResult.Cancel)
    {
        richTextBox1.SelectionFont = fontDialog.Font;//将当前选定的文字改变字体
    }
}

  上面代码将选定的文本设置为当前FontDialog对话框中的字体。

  
颜色对话框(ColorDialog)

  颜色拾取框也是我们常见的对话框之一,下面我们来看看在C#中是如何操作颜色对话框的呢?

  一、 颜色对话框(ColorDialog)的常见属性
AllowFullOpen禁止和启用"自定义颜色"按钮
FullOpen是否最先显示对话框的"自定义颜色"部份
ShowHelp是否显示"帮助"按钮
Color在对话框中显示的颜色
AnyColor显示可选择任何颜色
CustomColors是否显示自定义颜色
SolidColorOnly是否只能选择纯色

  二、 颜色对话框(ColorDialog)的效果如下:

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

  三、 实现代码见下:
复制C#代码保存代码
private void colorDialogBTN_Click(object sender, System.EventArgs e)
{
    ColorDialog colorDialog = new ColorDialog();
    colorDialog.AllowFullOpen = true;
    colorDialog.FullOpen = true;
    colorDialog.ShowHelp = true;
    colorDialog.Color = Color.Black;//初始化当前文本框中的字体颜色,当用户在ColorDialog对话框中点击"取消"按钮
   //恢复原来的值
    colorDialog.ShowDialog();
    richTextBox1.SelectionColor = colorDialog.Color;
}

  实现颜色对话框(ColorDialog)很容易吧,其实不只是颜色对话框,C#也是很容易的,只要用心去学,都容易的。讲完了颜色对话框(ColorDialog),我们 来讲打印和页面设置.


页面设置(PageSetupDialog)

  其实页面设置(PageSetupDialog)没有太多的讲,既然讲到这里,我还是把PageSetupDialog中常用的属性列出来吧

  一、页面设置(PageSetupDialog)常见属性
AllowMargins设置是否可以对边距的编辑
AllowOrientation是否可以使用"方向"单选框
AllowPaper设置是否可以对纸张大小的编辑
AllowPrinter设置是否可以使用"打印机"按钮
Document获取打印机设置的PrintDocument
MinMargins允许用户选择的最小边距

  二、面设置(PageSetupDialog)的效果如下

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

就这么简单啦,我们看看下面的吧,还有更重磅的东东呢?关于打印的。

  
打印预浏及打印

  打印是我们在windows编程中常要用到的功能,在以前都是很麻烦工作,但在Microsoft .net Framework中打印是以组件提供给我们使用,不过还是点麻烦的,所以就专门写出来,供大家参改。

  一, 在.net环境中,说到打印,就不能不说PrintDocumet这个类,PrintDocument属于System.Drawing.Printing这个名字空间,PrintDocument这个类是 实现打印的核心代码。

  如果要实现打印,就必需首先构造PrintDocument对象添加打印事件,
printDocument.PrintPage+=new PrintPageEventHandler(this.printDocument_PrintPage)
打印其实也是调用Graphics类的方法进行画图,下面这代码是根据MSDN上提供的例程改写的。MSDN打印例程地址:

   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDrawingPrintingPrintDocumentClassTopic.asp ,有兴趣的网友可以参改一下。

  下面是我改写的printDocument_PrintPage:
复制C#代码保存代码
private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    float linesPerPage = 0;//页面的行号
    float yPos = 0;//打印字符串的纵向位置
    int count = 0;//行计数器
    float leftMargin = e.MarginBounds.Left;//左边距
    float topMargin = e.MarginBounds.Top;//上边距
    string line = null;//行字符串
    Color clr = richTextBox1.SelectionColor;//当前的打印颜色,在我这个程序没有实现不同颜色打印
    SolidBrush b = new SolidBrush(clr);//刷子
    fnt = richTextBox1.SelectionFont;//当前的打印字体
    linesPerPage = e.MarginBounds.Height / fnt.GetHeight(e.Graphics);//每页可打印的行数

    //逐行循行打印一页
    while (count)
    {
        yPos = topMargin + (count * fnt.GetHeight(e.Graphics));
        e.Graphics.DrawString(line, fnt, b, leftMargin, yPos, new StringFormat());
        count++;
    }

    //如果该页打印完成而line不为空说明还有没完成的页面,发出下一次的打印事件,
    //在下一次的打印中lineReader会自动读取上次没有打印完的内容。lineReader可以记录当前读取的位置
    if (line != null)
        e.HasMorePages = true;
    else
        e.HasMorePages = false;
}

  在这里可以完成整个打印任务。把printDocument_PrintPage构造好后,就可以打印和打印预浏。

  二、打印预浏对话框(PrintPreviewDialog)

  打印预浏控件是用来显示一个打印文档在打印后的效果。在打印预浏对话框中包含有,打印、缩放、单页或多页、关闭等按钮。对话框如下:

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

  打印预浏对话框没有太多的属性,最后通过ShowDialog()调用。上面的实现代码如下:
复制C#代码保存代码
private void printPreviewBTN_Click(object sender, System.EventArgs e)
{
    lineReader = new StringReader(richTextBox1.Text);
    try
    {
        PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
        printPreviewDialog1.Document = printDocument;
        printPreviewDialog1.FormBorderStyle = FormBorderStyle.Fixed3D;
        printPreviewDialog1.ShowDialog(this);
    }
    catch (Exception excep)
    {
        MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
}

  很简单的,只要你把PrintDocument_PrintPage()写好了,这里就很容易了。

  三、打印对话框(PrintDialog)

  1、打印对话框(PrintDialog)只要有以下属性:
AllowPrintToFile禁止或使用"打印到文件"复选框
AllowSelection禁止或使用"选定内容"单选框
AllowSomePages禁止或使用"页"单选按钮
Document从中获取打印机设置的PrintDocument
PrintToFile打印到文件"复选框是否选中
ShowHelp控制是否显示"帮助"按钮
ShowNetWork控制是否显示"网络"按钮

  2、效果如下:

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

  3、用如下代码来实现:
复制C#代码保存代码
private void printDialogBTN_Click(object sender, System.EventArgs e)
{
    PrintDialog printDialog = new PrintDialog();
    printDialog.Document = printDocument;

    if (printDialog.ShowDialog() != DialogResult.Cancel)
    {
        try
        {
            printDocument.Print();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

  到此,所有的对话框都讲完了,头都大了吧。

  上述对话框,完全可以在vs.net的IDE环境中完成 ,这时为了说明问题,才分开一步步来讲。

  
总结

  在我们的教程,共讲述了文件对话框(FileDialog)、字体对话框(FontDialog)、,颜色对话框(ColorDialog)、打印预浏对话框(PrintPreviewDialog)、页面 设置(PrintDialog)、打印对话框(PrintDialog),这几个对话框,其中文件对话框(FileDialog)又有:打开文件对话框(OpenFileDialog)、保存文件对话(SaveFi leDialog)这两个对话框。有了上述基础,大家可以很容易的写出一个简单的记事本。

转载于:https://www.cnblogs.com/hzuIT/articles/694719.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值