熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET窗體對話框的實現

2013-11-13 10:56:24  來源: .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 框架對此提供了開放支持你可以選擇最佳方案以適合應用程序的需要我們介紹了與對話框組件有關的一些簡單應用你可以直接使用這些代碼也可以對其稍加修改用於你的應用程序


From:http://tw.wingwit.com/Article/program/net/201311/14815.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.