2017-08-11 2 views
0

C#で私のカスタムアプリケーションのためのfolderbrowserを作成しようとしていますが、folderbrowserのことは問題ありませんが、デフォルトのものがどのように動作するかのように。
@Kevinによれば、私はモーダルダイアログを作成しようとしています。モーダルダイアログを作成し、子フォームからフィードバックを受け取る方法(folderbrowserコントロールなど)

// Create the control and receive whether or not it should read fixed drives and also get a reference to the parent control. 
public FolderBrowser(Form1 frm1, bool allowFixed) 
    { 
     InitializeComponent(); 
     this.allowFixed = allowFixed; 
     frm1.Enabled = false; 
    } 

このダイアログが作成されたときに、私は、メインフォームをフリーズ:

// I create the folderbrowser control and await the directory 
    string CreateFileDialog(bool allowFixedDrives) 
    { 
     FolderBrowser fb = new FolderBrowser(this, allowFixedDrives); 
     fb.Show(); 

     //return THE_SELECTED_FOLDER_DIR; 
     return ""; 
    } 

だからfolderbrowserにも固定ドライブを許可するブールと親フォームへの参照があります。 ユーザーがフォームを閉じると、nullまたは ""が返され、ユーザーがOKを押すと、選択したディレクトリ(THE_SELECTED_FOLDER_DIRがある場所)が返されます。

親フォームにフィードバックを送信するダイアログをきれいに実装する方法を知っている人はいますか?
あなたは私が:)

+0

あなたがしようとしているのは、モーダルダイアログです。 – Kevin

+0

うん。はい。だから私はこれをどのように実装するのですか?また、ポインタのおかげで。 – CausticLasagne

+0

Form.Showメソッドではなく、Form.ShowDialogメソッドを使用します(親に参照を渡します)。 – Kevin

答えて

0

だから@Kevinとかなり興味深い議論した後、私はこれについて移動する最良の方法は、公衆関数を呼び出すことであろうことを決めたよほど混乱しているかどうか尋ねること自由に感じフォームを表示してください。私がしたのと同じ問題がある場合に備えて、これは開いたままにしておかなければならないと思います...

私は単に選択したフォルダ名を取得したいと思います。その選択したフォルダをテキストコントロールに表示します:

 bool invalid = false; 
     string value = CreateFileDialog(true, out invalid); 
     if (!invalid) 
     { 
      txt_File.Text = value; 
     } 
     else 
     { 
      MessageBox.Show("A folder was not selected."); 
     } 

さて、私はダイアログを作成しています。私は、ダイアログがファイルを選択せず​​に閉鎖されたかどうかを確認し、それが無効だ場合はメッセージボックスを表示....

string CreateFileDialog(bool allowFixedDrives, out bool invalid) 
    { 
     FolderBrowser fb = new FolderBrowser(this, allowFixedDrives); 

     return fb.ShowForm(out invalid); 
    } 

今ここでそれが面白いところです。私はここでダイアログを作成し、実際にそれを表示するためにフォーム上の関数を呼び出しますが、ファイルを選択せず​​に閉じられたかどうかを検出するために、out変数としてブール値を渡します。
そして最後に:ユーザーが[OK]を押した場合

public string ShowForm(out bool a) 
    { 
     ShowDialog(); 
     frm1.Enabled = true; 

     if (!Directory.Exists(selectedFolder)) 
     { 
      a = true; 
      return selectedFolder; 
     } 
     else 
     { 
      a = false; 
      return selectedFolder; 
     } 
    } 

は、私はそれ以外の場合を返さないともfalseにoutパラメータを設定し、選択したフォルダの名前を返します。
あなたはそれを持っています。
ここに投げてくれた皆、@ケビンに感謝します。

関連する問題