蓝天旭日

高手如云,自己只是个菜鸟而已! 没有人在意你曾经的努力和散漫,只有人关注你是否有成就......
posts - 19, comments - 104, trackbacks - 0, articles - 6
  博客园 :: 首页 :: 新随笔 :: 联系 :: 管理

公告

也谈C#对话框

Posted on 2007-12-26 15:02 蓝天旭日 阅读(...) 评论(...) 编辑 收藏
 

系统代码中,使用了C#中的对话框,其实对话框很简单,主要分为几中:

1、文件对话框(FileDialog) 它又常用到两个:
   打开文件对话框(OpenFileDialog)
   保存文件对话(SaveFileDialog)
2
、字体对话框(FontDialog)
3
、颜色对话框(olorDialog)
4
、打印预浏对话框(PrintPreviewDialog)
5
、页面设置(PrintDialog)
6
、打印对话框(PrintDialog)

具体每个对话框的使用查询MSDN便可得知,这里就简单的文件保存对话框使用举例说明,

一 保存对话框简单使用:

SaveFileDialog sf = new SaveFileDialog();

sf.AddExtension = true;

sf.Filter = "ACCESS 2003(*.mdb)|*.mdb|所有文件|*.*"; //文件类型

sf.Title = "数据库另存为";//标题

//这里我们可以设置更多选项,可以设置文件路径,这里是默认路径,[我的文档]

if (sf.ShowDialog() == DialogResult.OK)

{

      string fileName = sf.FileName;

       string pathFile = Application.StartupPath + System.Configuration.ConfigurationManager.AppSettings["dbpath"]; //指定文件

        File.Copy(pathFile, fileName, true); //复制

        MessageBox.Show("备份成功!");

}

 else

{

     MessageBox.Show("操作已取消!");

}

二 文件对话框打开例子:

private void openFileDialogBTN_Click(o b j e c t 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("");
}

两个重要事件:

FileOk

当用户点击"打开""保存"按钮时要处理的事件

HelpRequest

当用户点击"帮助"按钮时要处理的事件

字体对话框

两个重要事件

Apply

当点击"应用"按钮时要处理的事件

HelpRequest

当点击"帮助"按钮时要处理的事件

使用简单示例代码:

private void fontDialogBTN_Click(o b j e c t 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;
//将当前选定的文字改变字体
}
}

颜色对话框(ColorDialog)

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

AllowFullOpen

禁止和启用"自定义颜色"按钮

FullOpen

是否最先显示对话框的"自定义颜色"部份

ShowHelp

是否显示"帮助"按钮

Color

在对话框中显示的颜色

AnyColor

显示可选择任何颜色

CustomColors

是否显示自定义颜色

SolidColorOnly

是否只能选择纯色

private void colorDialogBTN_Click(o b j e c t sender, System.EventArgs e)
{
ColorDialog colorDialog=
new ColorDialog();
colorDialog.AllowFullOpen=
true;
colorDialog.FullOpen=
true;
colorDialog.ShowHelp=
true;
colorDialog.Color=Color.Black;
//初始化当前文本框中的字体颜色,当用户在ColorDialog对话框中点击"取消"按钮
file://恢复原来的值
colorDialog.ShowDialog();
richTextBox1.SelectionColor=colorDialog.Color;
}

页面设置(PageSetupDialog)

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

AllowMargins

设置是否可以对边距的编辑

AllowOrientation

是否可以使用"方向"单选框

AllowPaper

设置是否可以对纸张大小的编辑

AllowPrinter

设置是否可以使用"打印机"按钮

Document

获取打印机设置的PrintDocument

MinMargins

允许用户选择的最小边距

打印及预览

 打印是windows编程中非常常见也比较麻烦的,但是在.net环境中变得稍微简单了些,其主要是应用PrintDocumet类,属于System.Drawing.Printing命名空间,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

以下是摘录网上朋友写的一个打印改写类:

private void printDocument_PrintPage(o b j e c t 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);//每页可打印的行数
file://逐行循行打印一页
while(count {
yPos=topMargin+(count*fnt.GetHeight(e.Graphics));
e.Graphics.DrawString(line,fnt,b,leftMargin,yPos,
new StringFormat());
count++;
}
file:
//如果该页打印完成而line不为空说明还有没完成的页面,发出下一次的打印事件,
file://在下一次的打印中lineReader会自动读取上次没有打印完的内容。lineReader可以记录当前读取的位置
if(line!=null)
e.HasMorePages=
true;
else
e.HasMorePages=
false;
}

打印预浏对话框没有太多的属性,最后通过ShowDialog()调用。上面的实现代码如下:

private void printPreviewBTN_Click(o b j e c t 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;
}
}

3、用如下代码来实现

private void printDialogBTN_Click(o b j e c t 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);

         }

     }

 }

普通信息管理系统,无非就是读写数据库,保存、复制、删除、查找等文件操作。一个完成的系统需要对上述知识点灵活广泛应用,同时离不开对话框操作,上述总结希望起到一个总结作用。