程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET窗體對話框的實現

ASP.NET窗體對話框的實現

編輯:.NET實例教程

窗體對話框組件與微軟視窗操作系統中的對話框是一樣的;也就是說,PrintDialog 組件是“打印”對話框,OpenFileDialog 組件是 “打開文件”對話框,依此類推。

與以往的 Microsoft Visual Basic 6.0 等 Windows 程序設計語言相似,.NET 框架提供了 Windows 用戶耳熟能詳的對話框。對話框的具體用途(如 Printdialog 可用於文件打印等)通常是多種多樣的。故而在 .NET 框架提供的基礎類中不包含用於文件打印、顏色選擇等具體操作的代碼,而你卻可以根據應用程序的需要靈活地實現它們。因此,在 .Net 框架下,你不但可以直接應用標准對話框,而且能根據用戶的選擇作出不同的響應。本文提供的代碼其用途就在於此。

注意,關於各種對話框的屬性、方法和事件的完整描述,可以在相應類的 Members 頁面中找到。比如要查看 OpenFileDialog 組件的某一方法,就可以在文檔索引的“OpenFileDialog class, all members”欄目中找到相關的主題。

OpenFileDialog 組件

OpenFileDialog 對話框使得用戶能夠通過浏覽本地或者遠程的文件系統以打開所選文件。它將返回文件路徑和所選的文件名。

OpenFileDialog 組件和 SaveFileDialog 組件(下文將會詳細描述)包含了用於浏覽和選取文件所必需的基本代碼。有了它們,你就不必為這些功能編寫任何代碼,進而能夠專心實現打開或者保存文件等具體操作。

注意,FileDialog 類的 FilterIndex 屬性(由於繼承的原因,為 OpenFileDialog 和 SaveFileDialog 類所共有) 使用 one-based 索引(譯者注:指從 1 開始編號的索引)。 此特性將在下文的代碼中用到(並且會在相應位置再次強調)。當應用程序通過類型過濾器打開文件時,或者需要保存為特定格式的文件(比如:保存為純文本文件而不是二進制文件)時,這一點是非常重要的。人們在使用 FilterIndex 屬性時卻經常忘了它,因此現在務必要把它記住。

下列代碼通過 Button 控件的 Click 事件調用 OpenFileDialog 組件。當用戶選中某個文件,並且單擊 OK 的時候,所選的文件將被打開。在本例中,文件內容將被顯示在消息框內,以證實文件流被讀入。

本例假設存在名為 Button1 的 Button 控件和名為 OpenFileDialog1 的 OpenFileDialog 控件。

' Visual Basic
' NOTE: You must import the following namespace:
' Imports System.IO
' Without this import statement at the beginning
' of your code, the example will not function.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
Dim sr As New StreamReader(OpenFileDialog1.FileName)
MessageBox.Show(sr.ReadToEnd)
sr.Close()
End If
End Sub

// C#
// NOTE: You must import the following namespace:
// using System.IO;
// Without this import statement at the beginning
// of your code, the example will not function.
private void button1_Click(object sender, System.EventArgs e)
{
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamReader sr = new StreamReader(openFileDialog1.FileName);
MessageBox.Show(sr.ReadToEnd());
sr.Close();
}
}

打開文件還可以使用 OpenFileDialog 組件的 OpenFile 方法,它將返回文件的每一個字節。在下面的例子中,一個 OpenFileDialog 組件將被實例化,它使用了 cursor 過濾器,以限定用戶只能選取光標文件(擴展名為 .cur)。一旦某個 .cur 文件被選中,窗體的光標就被設成該文件描繪的光標形狀。

本例假設存在名為 Button1 的 Button 控件。

' Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' Display an OpenFileDialog so the user can select a Cursor.
Dim openFileDialog1 As New OpenFileDialog()
openFileDialog1.Filter = "Cursor Files|*.cur"
openFileDialog1.Title = "Select a Cursor File"

' Show the Dialog.
' If the user clicked OK in the dialog and
' a .CUR file was selected, open it.
If openFileDialog1.ShowDialog() = DialogResult.OK Then
If openFileDialog1.FileName <> "" Then
' Assign the cursor in the Stream to the Form's Cursor property.
Me.Cursor = New Cursor(openFileDialog1.OpenFile())
End If
End If
End Sub

// C#
private void button1_Click(object sender, System.EventArgs e)
{
// Display an OpenFileDialog so the user can select a Cursor.
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "Cursor Files|*.cur";
openFileDialog1.Title = "Select a Cursor File";

// Show the Dialog.
// If the user clicked OK in the dialog and
// a .CUR file was selected, open it.
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if(openFileDialog1.FileName != "")
{
// Assign the cursor in the Stream to the Form's Cursor property.
this.Cursor = new Cursor(openFileDialog1.OpenFile());
}
}
}

關於讀取文件流的進一步信息,請參閱FileStream.BeginRead 方法。

SaveFileDialog 組件

本對話框允許用戶浏覽文件系統並且選取將被寫入的文件。當然,你還必須為文件寫入編寫具體代碼。

下列代碼通過 Button 控件的 Click 事件調用 SaveFileDialog 組件。當用戶選中某個文件,並且單擊 OK 的時候,RichTextBox 控件裡的內容將被保存到所選的文件中。

本例假設存在名為 Button1 的 Button 控件,名為 RichTextBox1 的 RichTextBox 控件和名為 OpenFileDialog1 的 SaveFileDialog 控件。

' Visual Basic
' NOTE: You must import the following namespace:
' Imports System.IO
' Without this import statement at the beginning
' of your code, the code example will not function.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
RichTextBox1.SaveFile(SaveFileDialog1.FileName, _
RichTextBoxStreamType.PlainText)
End If
End Sub

// C#
// NOTE: You must import the following namespace:
// using System.IO;
// Without this import statement at the beginning
// of your code, the code example will not function.
private void button1_Click(object sender, System.EventArgs e)
{
if((saveFileDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
}
}

保存文件還可以用 SaveFileDialog 組件的 OpenFile 方法,它將提供一個用於寫入的 Stream 對象。

在下面的例子中,有一個包含圖片的 Button 控件。 當你單擊這個按鈕的時候,一個 SaveFileDialog 組件將被打開,它將使用 .gif 、 .jpeg 和 .bmp 類型的文件過濾器。一旦用戶通過 Save File 對話框內選中此類文件,按鈕上的圖片將被存入其中。

本例假設存在名為 Button2 的 Button 控件,並且它的 Image 屬性被設為某個擴展名為 .gif 、 .jpeg 或者 .bmp 的圖片文件。

'Visual Basic
' NOTE: You must import the following namespaces:
' Imports System.IO
' Imports System.Drawing.Imaging
' Without these import statements at the beginning of your code,
' the code example will not function.
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
' Display an SaveFileDialog so the user can save the Image
' assigned to Button2.
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"
saveFileDialog1.Title = "ty.
Me.Cursor = New Cursor(openFileDialog1.OpenFile())
End If
End If
End Sub

// C#
private void button1_Click(object sender, System.EventArgs e)
{
// Display an OpenFileDialog so the user can select a Cursor.
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "Cursor Files|*.cur";
openFileDialog1.Title = "Select a Cursor File";

// Show the Dialog.
// If the user clicked OK in the dialog and
// a .CUR file was selected, open it.
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if(openFileDialog1.FileName != "")
{
// Assign the cursor in the Stream to the Form's Cursor property.
this.Cursor = new Cursor(openFileDialog1.OpenFile());
}
}
}

關於讀取文件流的進一步信息,請參閱FileStream.BeginRead 方法。

SaveFileDialog 組件

本對話框允許用戶浏覽文件系統並且選取將被寫入的文件。當然,你還必須為文件寫入編寫具體代碼。

下列代碼通過 Button 控件的 Click 事件調用 SaveFileDialog 組件。當用戶選中某個文件,並且單擊 OK 的時候,RichTextBox 控件裡的內容將被保存到所選的文件中。

本例假設存在名為 Button1 的 Button 控件,名為 RichTextBox1 的 RichTextBox 控件和名為 OpenFileDialog1 的 SaveFileDialog 控件。

' Visual Basic
' NOTE: You must import the following namespace:
' Imports System.IO
' Without this import statement at the beginning
' of your code, the code example will not function.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
RichTextBox1.SaveFile(SaveFileDialog1.FileName, _
RichTextBoxStreamType.PlainText)
End If
End Sub

// C#
// NOTE: You must import the following namespace:
// using System.IO;
// Without this import statement at the beginning
// of your code, the code example will not function.
private void button1_Click(object sender, System.EventArgs e)
{
if((saveFileDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
}
}

保存文件還可以用 SaveFileDialog 組件的 OpenFile 方法,它將提供一個用於寫入的 Stream 對象。

在下面的例子中,有一個包含圖片的 Button 控件。 當你單擊這個按鈕的時候,一個 SaveFileDialog 組件將被打開,它將使用 .gif 、 .jpeg 和 .bmp 類型的文件過濾器。一旦用戶通過 Save File 對話框內選中此類文件,按鈕上的圖片將被存入其中。

本例假設存在名為 Button2 的 Button 控件,並且它的 Image 屬性被設為某個擴展名為 .gif 、 .jpeg 或者 .bmp 的圖片文件。

'Visual Basic
' NOTE: You must import the following namespaces:
' Imports System.IO
' Imports System.Drawing.Imaging
' Without these import statements at the beginning of your code,
' the code example will not function.
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
' Display an SaveFileDialog so the user can save the Image
' assigned to Button2.
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"
saveFileDialog1.Title = "Save an Image File"
saveFileDialog1.ShowDialog()

' If the file name is not an empty string open it for saving.
If saveFileDialog1.FileName <> "" Then
' Save the Image via a FileStream created by the OpenFile method.
Dim fs As FileStream = CType(saveFileDialog1.OpenFile(), FileStream)
' Save the Image in the appropriate ImageFormat based upon the
' file type selected in the dialog box.
' NOTE that the FilterIndex property is one-based.
Select Case saveFileDialog1.FilterIndex
Case 1
Me.button2.Image.Save(fs, ImageFormat.Jpeg)

Case 2
Me.button2.Image.Save(fs, ImageFormat.Bmp)

Case 3
Me.button2.Image.Save(fs, ImageFormat.Gif)
End Select

fs.Close()
End If
End Sub

// C#
// NOTE: You must import the following namespaces:
// using System.IO;
// using System.Drawing.Imaging;
// Without these import statements at the beginning of your code,
// the code example will not function.
private void button2_Click(object sender, System.EventArgs e)
{
// Display an SaveFileDialog so the user can save the Image
// assigned to Button2.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
saveFileDialog1.Title = "Save an Image File";
saveFileDialog1.ShowDialog();

// If the file name is not an empty string open it for saving.
if(saveFileDialog1.FileName != "")
{
// Save the Image via a FileStream created by the OpenFile method.
FileStream fs = (FileStream)saveFileDialog1.OpenFile();
// Save the Image in the appropriate ImageFormat based upon the
// File type selected in the dialog box.
// NOTE that the FilterIndex property is one-based.
switch(saveFileDialog1.FilterIndex)
{
case 1 :
this.button2.Image.Save(fs,ImageFormat.Jpeg);
break;

case 2 :
this.button2.Image.Save(fs,ImageFormat.Bmp);
break;

case 3 :
this.button2.Image.Save(fs,ImageFormat.Gif);
break;
}

fs.Close();
}
}


關於寫入文件流的進一步信息,請參閱 FileStream.BeginWrite 方法。

ColorDialog 組件

此對話框顯示顏色列表,並且返回所選的顏色。

與前兩種對話框不同,ColorDialog 組件很容易實現其主要功能(挑選顏色)。選取的顏色將成為 Color 屬性的設定值。因此,使用顏色就和設定屬性值一樣簡單。在下面的例子中,按鈕控制的 Click 事件將會開啟一個 ColorDialog 組件。一旦用戶選中某種顏色,並且單擊了 OK ,按鈕的背景將被設成所選的顏色。本例假設存在名為 Button1 的 Button 組件和名為 ColorDialog1 的 ColorDialog 組件。

' Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If ColorDialog1.ShowDialog() = DialogResult.OK Then
Button1.BackColor = ColorDialog1.Color
End If
End Sub

// C#
private void button1_Click(object sender, System.EventArgs e)
{
if(colorDialog1.ShowDialog() == DialogResult.OK)
{
button1.BackColor = colorDialog1.Color;
}
}


ColorDialog 組件具有 AllowFullOpen 屬性。當其設為 False 的時候,Define Custom Colors 按鈕將會失效,此時用戶只能使用預定義的調色板。此外,它還有一個 SolidColorOnly 屬性,當其設為 true 時,用戶將不能使用抖動顏色。

FontDialog 組件

此對話框允許用戶選擇字體,以改變其 weight 和 size 等屬性。

被選中的字體將成為 Font 屬性的設定值。因此,使用字體也和設定屬性值一樣簡單。在本例通過 Button 控件的 Click 事件調用 FileDialog 組件。當用戶選中一個字體,並且單擊 OK 的時候,TextBox 控件的 Font 屬性將被設成所選的字體。本例假設存在名為 Button1 的 Button 控件,名為 TextBox1 的 TextBox 控件和名為 FontDialog1 的 FontDialog 組件。

' Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If FontDialog1.ShowDialog() = DialogResult.OK Then
TextBox1.Font = FontDialog1.Font
End If
End Sub

// C#
private void button1_Click(object sender, System.EventArgs e)
{
if(fontDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Font = fontDialog1.Font;
}
}

FontDialog 元件還包括 MinSize 和 MaxSize 屬性,它們決定了允許用戶選擇的字體的最小和最大點數;還有一個 ShowColor 屬性,當其設為 True 時,用戶可以從對話框的下拉列表中選取字體的顏色。

PrintDocument 類

以下三個會話框,PrintDialog 組件、 PageSetupDialog 組件和 PrintPrevIEwDialog 控件,都與 PrintDocument 類有關。PrintDocument 類用於文檔打印前的設置:設定其屬性,以改變文檔外觀和打印方式,再將其實例輸出到打印機。通常的步驟是:
(1) 生成 PrintDocument 類的一個實例;
(2) 設置 PageSetupDialog 組件的屬性;
(3) 使用 PrintPrevIEwDialog 控件進行預覽;
(4) 通過 PrintDialog 組件打印出來。

關於 PrintDocument 類的進一步資料,請參閱 PrintDocument Class 。

PrintDialog 元件

此對話框允許用戶指定將要打印的文檔。除此之外,它還能用於選擇打印機、決定打印頁,以及設置打印相關屬性。通過它可以讓用戶文檔打印更具靈活性:他們既能打印整個文檔,又能打印某個片斷,還能打印所選區域。

使用 PrintDialog 組件時要注意它是如何與 PrinterSettings 類進行交互的。PrinterSettings 類用於設定紙張來源、分辨率和加倍放大等打印機特征屬性。每項設置都是 PrinterSettings 類的一個屬性。通過 PrintDialog 類可以改變關聯到文檔的 PrinterSetting 類實例(由PrintDocument.PrinterSettings 指定)的特征屬性值。

PrintDialog 組件將包含特征屬性設置的 PrintDocument 類的實例提交到打印機。應用 PrintDialog 組件進行文檔打印的范例,請參見 Creating Standard Windows Forms Print Jobs。

PageSetupDialog 組件

PageSetupDialog 組件用於顯示打印布局、紙張大小和其它頁面選項。如同其他對話框一樣,可以通過 ShowDialog 方法調用 PageSetupDialog 組件。此外,必須生成一個 PrintDocument 類的實例,也即被打印的文檔;而且必須安裝了一台本地或者遠程打印機,否則,PageSetupDialog 組件將無法獲取打印格式以供用戶選擇。

使用 PageSetupDialog 組件時必須注意它是如何與 PageSettings 類進行交互的。PageSettings 類決定頁面如何被打印,比如打印方向、頁面大小和邊距等。每項設置都是 PageSettings 類的一個屬性。PageSetupDialog 類可以改變 PageSettings 類實例(由 PrintDocument.DefaultPageSettings 指定)的上述選項。

在下列代碼中,Button 控件的 Click 事件處理程序開啟一個 PageSetupDialog 組件;其 Document 屬性被設成某個存在的文檔;其 Color 屬性被設成 false 。

本例假設存在名為 Button1 的 Button 控件、名為 myDocument 的 PrintDocument 控件和名為 PageSetupDialog1 的 PageSetupDialog 組件。

' Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' The print document 'myDocument' used below
' is merely for an example.
'You will have to specify your own print document.
PageSetupDialog1.Document = myDocument
' Set the print document's color setting to false,
' so that the page will not be printed in color.
PageSetupDialog1.Document.DefaultPageSettings.Color = False
PageSetupDialog1.ShowDialog()
End Sub

// C#
private void button1_Click(object sender, System.EventArgs e)
{
// The print document 'myDocument' used below
// is merely for an example.
// You will have to specify your own print document.
pageSetupDialog1.Document = myDocument;
// Set the print document's color setting to false,
// so that the page will not be printed in color.
pageSetupDialog1.Document.DefaultPageSettings.Color = false;
pageSetupDialog1.ShowDialog();
}

PrintPrevIEwDialog 控件

與其他對話框不同,PrintPrevIEwDialog 控件對整個應用程序或者其它控件沒有影響,因為它僅僅在對話框裡顯示內容。此對話框用於顯示文檔,主要是打印之前的預覽。

調用 PrintPrevIEwDialog 控件,也是使用 ShowDialog 方法。同時,必須生成 PrintDocument 類的一個實例,也即被打印的文檔。

注意:當使用 PrintPreviewDialog 控件時,也必須已經安裝了一台本地或者遠程打印機,否則 PrintPrevIEwDialog 組件將無法獲取被打印文檔的外觀。

PrintPreviewDialog 控件通過 PrinterSettings 類和 PageSettings 類進行設置,分別與 PageDialog 組件和 PageSetupDialog 組件相似。此外,PrintPrevIEwDialog 控件的 Document 屬性所指定的被打印文檔,同時作用於 PrinterSettings 類和 PageSettings 類,其內容被顯示在預覽窗口中。

在下列代碼中,通過 Button 控件的 Click 事件調用 PrintPrevIEwDialog 控件。被打印文檔在 Document 屬性中指定。注意:代碼中沒有指定被打印文檔。

本例假設存在名為 Button1 的 Button 控件,名為 myDocument 的 PrintDocument 組件和名為 PrintPreviewDialog1 的 PrintPrevIEwDialog 控件。


' Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' The print document 'myDocument' used below
' is merely for an example.
' You will have to specify your own print document.
PrintPrevIEwDialog1.Document = myDocument
PrintPrevIEwDialog1.ShowDialog()
End Sub

// C#
private void button1_Click(object sender, System.EventArgs e)
{
// The print document 'myDocument' used below
// is merely for an example.
// You will have to specify your own print document.
printPrevIEwDialog1.Document = myDocument;
printPrevIEwDialog1.ShowDialog()
}

小結
.NET 框架裡包含了 Windows 用戶所熟悉的各種公共對話框,於是在應用程序中提供交互功能變得更加容易。通常,對話框的用途是多種多樣的;.Net 框架對此提供了開放支持,你可以選擇最佳方案以適合應用程序的需要。我們介紹了與對話框組件有關的一些簡單應用。你可以直接使用這些代碼,也可以對其稍加修改用於你的應用程序。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved