2016-10-17 10 views
0

FolderBrowseDialogをエミュレートするフォームを作成しましたが、追加したい機能がいくつかあります。それはテストされ、働いているので、今私はコントロールにしたいです。 私の問題は、Formの代わりにUserControlから継承すると、Close()メソッドがなくなり、FormClosingというイベントがなくなったということです。 [OK]または[キャンセル]ボタンをクリックすると、フォームを閉じて呼び出し元オブジェクトに制御を戻すにはどうすればよいですか?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

コンポーネントを作成しない場合は、設計時にコンポーネントを使用することはできず、コードでのみ使用する必要があります。しかし、コンポーネントを作ることで、実際のフォルダブラウザコンポーネント、タイマーなどのフォームにそのインスタンスをドロップすることができます。 –

関連する問題