-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 回答