-2

コントロールをwinFormに渡す方法はありますか?実際にやりたいのは検索フォームです.このフォームはさまざまなフォームからリクエストされ、このフォームのコンテンツは動的になります.フォームに適切なコントロールを渡すことはできますが、実装について考えないでください

4

2 に答える 2

0

コントロールを渡すことができますが、Windows フォームの規則では、コンストラクター パラメーターを使用する代わりにプロパティを割り当てることになっています。

// Control holding the search form
public class MySearchControl : UserControl {    ...   }

// Form to read data from the search form
public class MyFormForReadingSearchControl : Form
{    
   // Constructor is as normal

   public MySearchControl SearchControl { get; set; } 
}

// Form to send the search data.
public class MyForForSendingTheSearchControl : Form
{    
   public MySearchControl SearchControl { get; set; }

   protected void searchControl_Click(object sender, EventArgs e)    
   {
      var newForm = new MyFormForReadingSearchControl();
      newForm.SearchControl = this.SearchControl; // Pass via property
      newForm.Show();    
   }
}

の場合SearchControl、必要なさまざまな検索フォームの派生クラスを作成します。一般的な方法でデータを取得するための標準的なプロパティまたはメソッドをいくつか定義します。

于 2013-06-10T10:58:41.133 に答える
0

フォームに渡したいコントロールが実際に動的である場合は、それらをフォームのコンストラクターに渡し、そのコントロール コレクションに追加できます。

class SearchForm
{
    public void SearchForm(IEnumerable<Control> contentControls)
    {
        foreach(var contentControl in contentControls)
        {
            this.Controls.Add(contentControl);
        }
    }    
}

ただし、フォームのクライアントがいくつかの事前定義されたコントロールのサブセットのみを表示できるようにしたい場合は、いくつかの列挙型をコンストラクターに渡し、その値に基づいて適切なコントロールを作成することをお勧めします。

enum SearchControls
{
    None = 0,
    Search = 1,
    Replace = 1 << 2,
    RecentSearches= 1 << 3,
}

class SearchForm
{
    public void SearchForm(SearchControls searchControls)
    {
        if(searchControls.HasFlag(SearchControls.Search))
            CreateAndAddSearchControl();   
        if(searchControls.HasFlag(SearchControls.Replace))
            CreateAndAddReplaceControl();
        if(searchControls.HasFlag(SearchControls.RecentSearches))
            CreateAndAddRecentSearchesControl();
    }    
}
于 2013-06-10T10:58:53.773 に答える