2016-10-17 50 views
0

我創建了一個模擬FolderBrowseDialog的表單,但添加了一些我想要的功能。它經過測試和工作,所以現在我想把它變成一個控件。 我的問題是,只要我繼承UserControl而不是Form,我不再有Close()方法,並且我不再有FormClosing事件。 當我點擊確定或取消按鈕時,如何關閉窗體並將控件返回給調用對象?使窗體成爲可重複使用的控件,如FolderBrowser

回答

0

要使其成爲可重用組件,而不是試圖從Control中派生出來,請創建一個使用該表單的Component。通過這種方式,它可以顯示在工具箱中,並且可以像其他組件一樣將組件的實例放置在設計表面上。

您的組件應該包含一些您想要從對話框公開的屬性,還包含一個ShowDialog方法,該方法使用一些屬性(如標題,初始目錄)創建表單並將您的自定義窗體顯示爲對話框並設置一些屬性(如選定的文件夾)並返回對話結果。例如:

using System.ComponentModel; 
using System.Windows.Forms; 
public partial class MyFolderBrowser : Component 
{ 
    public string Text { get; set; } 
    public string SelectcedFolder { get; set; } 
    public DialogResult ShowDialog() 
    { 
     using (var f = new YourCustomForm() { Text = this.Text }) 
     { 
      var result = f.ShowDialog(); 
      if (result == DialogResult.OK) 
       SelectcedFolder = f.SelectedFolder; 
      return result; 
     } 
    } 
} 
+0

謝謝。這樣可行。 – Orcbighter

+0

謝謝,這是有效的。 但是,我確實找到了一個備用解決方案。我創建了一個類庫,然後用創建了 的標記class.cs替換爲我的表單的類,然後只更改了名稱空間。 它的工作原理,但我更喜歡你的解決方案。這是一個小清潔劑。 – Orcbighter

+0

如果您不製作組件,則不能在設計時使用它,只能在代碼中使用它。但是製作一個組件可以讓你將它的一個實例放在你的表單上,就像一個真正的文件夾瀏覽器組件,一個計時器等一樣。 –

相關問題