asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET窗体对话框的实现


发布日期:2018年06月01日
 
ASP.NET窗体对话框的实现
窗体对话框组件与微软视窗操作系统中的对话框是一样的也就是说PrintDialog 组件是打印对话框OpenFileDialog 组件是 打开文件对话框依此类推

与以往的 Microsoft Visual Basic 等 Windows 程序设计语言相似NET 框架提供了 Windows 用户耳熟能详的对话框对话框的具体用途(如 Printdialog 可用于文件打印等)通常是多种多样的故而在 NET 框架提供的基础类中不包含用于文件打印颜色选择等具体操作的代码而你却可以根据应用程序的需要灵活地实现它们因此NET 框架下你不但可以直接应用标准对话框而且能根据用户的选择作出不同的响应本文提供的代码其用途就在于此

注意关于各种对话框的属性方法和事件的完整描述可以在相应类的 Members 页面中找到比如要查看 OpenFileDialog 组件的某一方法就可以在文档索引的OpenFileDialog class all members栏目中找到相关的主题

1.OpenFileDialog 组件

OpenFileDialog 对话框使得用户能够通过浏览本地或者远程的文件系统以打开所选文件它将返回文件路径和所选的文件名

OpenFileDialog 组件和SaveFileDialog 组件(下文将会详细描述)包含了用于浏览和选取文件所必需的基本代码有了它们你就不必为这些功能编写任何代码进而能够专心实现打开或者保存文件等具体操作

注意FileDialog 类的 FilterIndex 属性(由于继承的原因为 OpenFileDialog 和 SaveFileDialog 类所共有) 使用 onebased 索引(译者注指从 开始编号的索引) 此特性将在下文的代码中用到(并且会在相应位置再次强调)当应用程序通过类型过滤器打开文件时或者需要保存为特定格式的文件(比如保存为纯文本文件而不是二进制文件)时这一点是非常重要的人们在使用 FilterIndex 属性时却经常忘了它因此现在务必要把它记住

下列代码通过 Button 控件的 Click 事件调用 OpenFileDialog 组件当用户选中某个文件并且单击 OK 的时候所选的文件将被打开在本例中文件内容将被显示在消息框内以证实文件流被读入

本例假设存在名为 Button 的 Button 控件和名为 OpenFileDialog 的 OpenFileDialog 控件

Visual Basic

NOTE: You must import the following namespace:

Imports SystemIO

Without this import statement at the beginning

of your code the example will not function

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

If OpenFileDialogShowDialog() = DialogResultOK Then

Dim sr As New StreamReader(OpenFileDialogFileName)

MessageBoxShow(srReadToEnd)

srClose()

End If

End Sub

// C#

// NOTE: You must import the following namespace:

// using SystemIO;

// Without this import statement at the beginning

// of your code the example will not function

private void button_Click(object sender SystemEventArgs e)

{

if(openFileDialogShowDialog() == DialogResultOK)

{

StreamReader sr = new StreamReader(openFileDialogFileName);

MessageBoxShow(srReadToEnd());

srClose();

}

}

打开文件还可以使用 OpenFileDialog 组件的 OpenFile 方法它将返回文件的每一个字节在下面的例子中一个 OpenFileDialog 组件将被实例化它使用了 cursor 过滤器以限定用户只能选取光标文件(扩展名为 cur)一旦某个 cur 文件被选中窗体的光标就被设成该文件描绘的光标形状

本例假设存在名为 Button 的 Button 控件

Visual Basic

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

Display an OpenFileDialog so the user can select a Cursor

Dim openFileDialog As New OpenFileDialog()

openFileDialogFilter = Cursor Files|*cur

openFileDialogTitle = Select a Cursor File

Show the Dialog

If the user clicked OK in the dialog and

a CUR file was selected open it

If openFileDialogShowDialog() = DialogResultOK Then

If openFileDialogFileName <> Then

Assign the cursor in the Stream to the Forms Cursor property

MeCursor = New Cursor(openFileDialogOpenFile())

End If

End If

End Sub

// C#

private void button_Click(object sender SystemEventArgs e)

{

// Display an OpenFileDialog so the user can select a Cursor

OpenFileDialog openFileDialog = new OpenFileDialog();

openFileDialogFilter = Cursor Files|*cur;

openFileDialogTitle = Select a Cursor File;

// Show the Dialog

// If the user clicked OK in the dialog and

// a CUR file was selected open it

if (openFileDialogShowDialog() == DialogResultOK)

{

if(openFileDialogFileName != )

{

// Assign the cursor in the Stream to the Forms Cursor property

thisCursor = new Cursor(openFileDialogOpenFile());

}

}

}

关于读取文件流的进一步信息请参阅FileStreamBeginRead 方法

2.SaveFileDialog 组件

本对话框允许用户浏览文件系统并且选取将被写入的文件当然你还必须为文件写入编写具体代码

下列代码通过 Button 控件的 Click 事件调用 SaveFileDialog 组件当用户选中某个文件并且单击 OK 的时候RichTextBox 控件里的内容将被保存到所选的文件中

本例假设存在名为 Button 的 Button 控件名为 RichTextBox 的 RichTextBox 控件和名为 OpenFileDialog 的 SaveFileDialog 控件

Visual Basic

NOTE: You must import the following namespace:

Imports SystemIO

Without this import statement at the beginning

of your code the code example will not function

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

If SaveFileDialogShowDialog() = DialogResultOK Then

RichTextBoxSaveFile(SaveFileDialogFileName _

RichTextBoxStreamTypePlainText)

End If

End Sub

// C#

// NOTE: You must import the following namespace:

// using SystemIO;

// Without this import statement at the beginning

// of your code the code example will not function

private void button_Click(object sender SystemEventArgs e)

{

if((saveFileDialogShowDialog() == DialogResultOK)

{

richTextBoxSaveFile(saveFileDialogFileName RichTextBoxStreamTypePlainText);

}

}

保存文件还可以用 SaveFileDialog 组件的 OpenFile 方法它将提供一个用于写入的 Stream 对象

在下面的例子中有一个包含图片的 Button 控件 当你单击这个按钮的时候一个 SaveFileDialog 组件将被打开它将使用 gif jpeg 和 bmp 类型的文件过滤器一旦用户通过 Save File 对话框内选中此类文件按钮上的图片将被存入其中

本例假设存在名为 Button 的 Button 控件并且它的 Image 属性被设为某个扩展名为 gif jpeg 或者 bmp 的图片文件

Visual Basic

NOTE: You must import the following namespaces:

Imports SystemIO

Imports SystemDrawingImaging

Without these import statements at the beginning of your code

the code example will not function

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

Display an SaveFileDialog so the user can save the Image

assigned to Button

Dim saveFileDialog As New SaveFileDialog()

saveFileDialogFilter = JPeg Image|*jpg|Bitmap Image|*bmp|Gif Image|*gif

saveFileDialogTitle = Save an Image File

saveFileDialogShowDialog()

If the file name is not an empty string open it for saving

If saveFileDialogFileName <> Then

Save the Image via a FileStream created by the OpenFile method

Dim fs As FileStream = CType(saveFileDialogOpenFile() FileStream)

Save the Image in the appropriate ImageFormat based upon the

file type selected in the dialog box

NOTE that the FilterIndex property is onebased

Select Case saveFileDialogFilterIndex

Case

MebuttonImageSave(fs ImageFormatJpeg)

Case

MebuttonImageSave(fs ImageFormatBmp)

Case

MebuttonImageSave(fs ImageFormatGif)

End Select

fsClose()

End If

End Sub

// C#

// NOTE: You must import the following namespaces:

// using SystemIO;

// using SystemDrawingImaging;

// Without these import statements at the beginning of your code

// the code example will not function

private void button_Click(object sender SystemEventArgs e)

{

// Display an SaveFileDialog so the user can save the Image

// assigned to Button

SaveFileDialog saveFileDialog = new SaveFileDialog();

saveFileDialogFilter = JPeg Image|*jpg|Bitmap Image|*bmp|Gif Image|*gif;

saveFileDialogTitle = Save an Image File;

saveFileDialogShowDialog();

// If the file name is not an empty string open it for saving

if(saveFileDialogFileName != )

{

// Save the Image via a FileStream created by the OpenFile method

FileStream fs = (FileStream)saveFileDialogOpenFile();

// Save the Image in the appropriate ImageFormat based upon the

// File type selected in the dialog box

// NOTE that the FilterIndex property is onebased

switch(saveFileDialogFilterIndex)

{

case :

thisbuttonImageSave(fsImageFormatJpeg);

break;

case :

thisbuttonImageSave(fsImageFormatBmp);

break;

case :

thisbuttonImageSave(fsImageFormatGif);

break;

}

fsClose();

}

}

关于写入文件流的进一步信息请参阅 FileStreamBeginWrite 方法

3.ColorDialog 组件

此对话框显示颜色列表并且返回所选的颜色

与前两种对话框不同ColorDialog 组件很容易实现其主要功能(挑选颜色)选取的颜色将成为 Color 属性的设定值因此使用颜色就和设定属性值一样简单在下面的例子中按钮控制的 Click 事件将会开启一个 ColorDialog 组件一旦用户选中某种颜色并且单击了 OK 按钮的背景将被设成所选的颜色本例假设存在名为 Button 的 Button 组件和名为 ColorDialog 的 ColorDialog 组件

Visual Basic

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

If ColorDialogShowDialog() = DialogResultOK Then

ButtonBackColor = ColorDialogColor

End If

End Sub

// C#

private void button_Click(object sender SystemEventArgs e)

{

if(colorDialogShowDialog() == DialogResultOK)

{

buttonBackColor = colorDialogColor;

}

}

ColorDialog 组件具有 AllowFullOpen 属性当其设为 False 的时候Define Custom Colors 按钮将会失效此时用户只能使用预定义的调色板此外它还有一个 SolidColorOnly 属性当其设为 true 时用户将不能使用抖动颜色

4.FontDialog 组件

此对话框允许用户选择字体以改变其 weight 和 size 等属性

被选中的字体将成为 Font 属性的设定值因此使用字体也和设定属性值一样简单在本例通过 Button 控件的 Click 事件调用 FileDialog 组件当用户选中一个字体并且单击 OK 的时候TextBox 控件的 Font 属性将被设成所选的字体本例假设存在名为 Button 的 Button 控件名为 TextBox 的 TextBox 控件和名为 FontDialog 的 FontDialog 组件

Visual Basic

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

If FontDialogShowDialog() = DialogResultOK Then

TextBoxFont = FontDialogFont

End If

End Sub

// C#

private void button_Click(object sender SystemEventArgs e)

{

if(fontDialogShowDialog() == DialogResultOK)

{

textBoxFont = fontDialogFont;

}

}

FontDialog 元件还包括 MinSize 和 MaxSize 属性它们决定了允许用户选择的字体的最小和最大点数还有一个 ShowColor 属性当其设为 True 时用户可以从对话框的下拉列表中选取字体的颜色

5.PrintDocument 类

以下三个会话框PrintDialog 组件 PageSetupDialog 组件和 PrintPreviewDialog 控件都与 PrintDocument 类有关PrintDocument 类用于文档打印前的设置设定其属性以改变文档外观和打印方式再将其实例输出到打印机通常的步骤是

() 生成 PrintDocument 类的一个实例

() 设置 PageSetupDialog 组件的属性

() 使用 PrintPreviewDialog 控件进行预览

() 通过 PrintDialog 组件打印出来

关于 PrintDocument 类的进一步资料请参阅 PrintDocument Class

6.PrintDialog 元件

此对话框允许用户指定将要打印的文档除此之外它还能用于选择打印机决定打印页以及设置打印相关属性通过它可以让用户文档打印更具灵活性他们既能打印整个文档又能打印某个片断还能打印所选区域

使用 PrintDialog 组件时要注意它是如何与 PrinterSettings 类进行交互的PrinterSettings 类用于设定纸张来源分辨率和加倍放大等打印机特征属性每项设置都是 PrinterSettings 类的一个属性通过 PrintDialog 类可以改变关联到文档的 PrinterSetting 类实例(由PrintDocumentPrinterSettings 指定)的特征属性值

PrintDialog 组件将包含特征属性设置的 PrintDocument 类的实例提交到打印机应用 PrintDialog 组件进行文档打印的范例请参见 Creating Standard Windows Forms Print Jobs

7.PageSetupDialog 组件

PageSetupDialog 组件用于显示打印布局纸张大小和其它页面选项如同其他对话框一样可以通过 ShowDialog 方法调用 PageSetupDialog 组件此外必须生成一个 PrintDocument 类的实例也即被打印的文档而且必须安装了一台本地或者远程打印机否则PageSetupDialog 组件将无法获取打印格式以供用户选择

使用 PageSetupDialog 组件时必须注意它是如何与 PageSettings 类进行交互的PageSettings 类决定页面如何被打印比如打印方向页面大小和边距等每项设置都是 PageSettings 类的一个属性PageSetupDialog 类可以改变 PageSettings 类实例(由 PrintDocumentDefaultPageSettings 指定)的上述选项

在下列代码中Button 控件的 Click 事件处理程序开启一个 PageSetupDialog 组件其 Document 属性被设成某个存在的文档其 Color 属性被设成 false

本例假设存在名为 Button 的 Button 控件名为 myDocument 的 PrintDocument 控件和名为 PageSetupDialog 的 PageSetupDialog 组件

Visual Basic

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

The print document myDocument used below

is merely for an example

You will have to specify your own print document

PageSetupDialogDocument = myDocument

Set the print documents color setting to false

so that the page will not be printed in color

PageSetupDialogDocumentDefaultPageSettingsColor = False

PageSetupDialogShowDialog()

End Sub

// C#

private void button_Click(object sender SystemEventArgs e)

{

// The print document myDocument used below

// is merely for an example

// You will have to specify your own print document

pageSetupDialogDocument = myDocument;

// Set the print documents color setting to false

// so that the page will not be printed in color

pageSetupDialogDocumentDefaultPageSettingsColor = false;

pageSetupDialogShowDialog();

}

8.PrintPreviewDialog 控件

与其他对话框不同PrintPreviewDialog 控件对整个应用程序或者其它控件没有影响因为它仅仅在对话框里显示内容此对话框用于显示文档主要是打印之前的预览

调用 PrintPreviewDialog 控件也是使用 ShowDialog 方法同时必须生成 PrintDocument 类的一个实例也即被打印的文档

注意当使用 PrintPreviewDialog 控件时也必须已经安装了一台本地或者远程打印机否则 PrintPreviewDialog 组件将无法获取被打印文档的外观

PrintPreviewDialog 控件通过 PrinterSettings 类和 PageSettings 类进行设置分别与 PageDialog 组件和 PageSetupDialog 组件相似此外PrintPreviewDialog 控件的 Document 属性所指定的被打印文档同时作用于 PrinterSettings 类和 PageSettings 类其内容被显示在预览窗口中

在下列代码中通过 Button 控件的 Click 事件调用 PrintPreviewDialog 控件被打印文档在 Document 属性中指定注意代码中没有指定被打印文档

本例假设存在名为 Button 的 Button 控件名为 myDocument 的 PrintDocument 组件和名为 PrintPreviewDialog 的 PrintPreviewDialog 控件

Visual Basic

Private Sub Button_Click(ByVal sender As SystemObject _

ByVal e As SystemEventArgs) Handles ButtonClick

The print document myDocument used below

is merely for an example

You will have to specify your own print document

PrintPreviewDialogDocument = myDocument

PrintPreviewDialogShowDialog()

End Sub

// C#

private void button_Click(object sender SystemEventArgs e)

{

// The print document myDocument used below

// is merely for an example

// You will have to specify your own print document

printPreviewDialogDocument = myDocument;

printPreviewDialogShowDialog()

}

小结

NET 框架里包含了 Windows 用户所熟悉的各种公共对话框于是在应用程序中提供交互功能变得更加容易通常对话框的用途是多种多样的NET 框架对此提供了开放支持你可以选择最佳方案以适合应用程序的需要我们介绍了与对话框组件有关的一些简单应用你可以直接使用这些代码也可以对其稍加修改用于你的应用程序

上一篇:ASP.NET入门教程 8.6 改善图片上传功能[2]

下一篇:ASP.NET入门教程 6.3.1 回送结构[2]