将控制权传递给新的WinForm c#

时间:2013-06-10 10:49:11

标签: c# winforms search

有没有办法将控件传递给winForm实际上我想要做的是搜索表单,这个表单将从不同的表单请求,这个表单的内容将是动态的我虽然我可以通过适当的控制到我的形式但不能想到实施

2 个答案:

答案 0 :(得分: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,创建所需的各种搜索表单的派生类。定义一些标准属性或方法以通用方式检索数据。

答案 1 :(得分: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();
    }    
}