明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET窗體對話框的完成

[摘要]窗體對話框組件與微軟視窗操作系統(tǒng)中的對話框是一樣的;也就是說,PrintDialog 組件是“打印”對話框,OpenFileDialog 組件是 “打開文件”對話框,依此類推。 與以往的 Microsoft Visual Basic 6.0 等 Windows 程序設(shè)計語言相似,.NET 框架提供...

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

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

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

OpenFileDialog 組件

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

OpenFileDialog 組件和 SaveFileDialog 組件(下文將會詳細描述)包含了用于瀏覽和選取文件所必需的基本代碼。有了它們,你就不必為這些功能編寫任何代碼,進而能夠?qū)P膶崿F(xiàn)打開或者保存文件等具體操作。

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

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

本例假設(shè)存在名為 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 方法,它將返回文件的每一個字節(jié)。在下面的例子中,一個 OpenFileDialog 組件將被實例化,它使用了 cursor 過濾器,以限定用戶只能選取光標文件(擴展名為 .cur)。一旦某個 .cur 文件被選中,窗體的光標就被設(shè)成該文件描繪的光標形狀。

本例假設(shè)存在名為 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());
}
}
}

關(guān)于讀取文件流的進一步信息,請參閱FileStream.BeginRead 方法。

SaveFileDialog 組件

本對話框允許用戶瀏覽文件系統(tǒng)并且選取將被寫入的文件。當然,你還必須為文件寫入編寫具體代碼。

下列代碼通過 Button 控件的 Click 事件調(diào)用 SaveFileDialog 組件。當用戶選中某個文件,并且單擊 OK 的時候,RichTextBox 控件里的內(nèi)容將被保存到所選的文件中。

本例假設(shè)存在名為 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 對話框內(nèi)選中此類文件,按鈕上的圖片將被存入其中。

本例假設(shè)存在名為 Button2 的 Button 控件,并且它的 Image 屬性被設(shè)為某個擴展名為 .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();
}
}


關(guān)于寫入文件流的進一步信息,請參閱 FileStream.BeginWrite 方法。

ColorDialog 組件

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

與前兩種對話框不同,ColorDialog 組件很容易實現(xiàn)其主要功能(挑選顏色)。選取的顏色將成為 Color 屬性的設(shè)定值。因此,使用顏色就和設(shè)定屬性值一樣簡單。在下面的例子中,按鈕控制的 Click 事件將會開啟一個 ColorDialog 組件。一旦用戶選中某種顏色,并且單擊了 OK ,按鈕的背景將被設(shè)成所選的顏色。本例假設(shè)存在名為 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 屬性。當其設(shè)為 False 的時候,Define Custom Colors 按鈕將會失效,此時用戶只能使用預定義的調(diào)色板。此外,它還有一個 SolidColorOnly 屬性,當其設(shè)為 true 時,用戶將不能使用抖動顏色。

FontDialog 組件

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

被選中的字體將成為 Font 屬性的設(shè)定值。因此,使用字體也和設(shè)定屬性值一樣簡單。在本例通過 Button 控件的 Click 事件調(diào)用 FileDialog 組件。當用戶選中一個字體,并且單擊 OK 的時候,TextBox 控件的 Font 屬性將被設(shè)成所選的字體。本例假設(shè)存在名為 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 屬性,它們決定了允許用戶選擇的字體的最小和最大點數(shù);還有一個 ShowColor 屬性,當其設(shè)為 True 時,用戶可以從對話框的下拉列表中選取字體的顏色。

PrintDocument 類

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

關(guān)于 PrintDocument 類的進一步資料,請參閱 PrintDocument Class 。

PrintDialog 元件

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

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

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

PageSetupDialog 組件

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

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

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

本例假設(shè)存在名為 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 控件對整個應(yīng)用程序或者其它控件沒有影響,因為它僅僅在對話框里顯示內(nèi)容。此對話框用于顯示文檔,主要是打印之前的預覽。

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

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

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

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

本例假設(shè)存在名為 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()
}

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




相關(guān)文章