如果您真的想要在您的控件中反复使用同一个网格,您可以创建一个单独的静态网格,并让您的 ClientLookUp 构造函数将其添加到正确的位置 - 面板,或其他任何东西——无论何时创建一个新的。
然而,在你走这条路之前,问问自己这是否真的是你想要做的。在许多地方存在相同的网格可能会给您带来麻烦。如果您想支持网格内编辑,您会发现更改一个值会更改所有其他网格中的相同值..
编辑
我尝试让下面的代码工作,但我不确定这种方法是否可行。似乎当您尝试将相同的 UI 元素附加到多个位置时,它就会移出您放置它的最后一个位置;看起来您不能同时在多个地方拥有相同的网格。仔细想想,这是有道理的。
这是我尝试过的代码。或许对你有些用处。
public UserControl1()
{
InitializeComponent();
this.Controls.Add(myStaticGridView);
myStaticGridView.Dock = DockStyle.Fill;
}
static DataGridView _staticGrid;
public DataGridView myStaticGridView
{
get
{
if (_staticGrid != null)
return _staticGrid;
_staticGrid = new DataGridView();
_staticGrid.Columns.Add("A", "A");
_staticGrid.Columns.Add("B", "B");
_staticGrid.Columns.Add("C", "C");
_staticGrid.Columns[0].DataPropertyName = "A";
_staticGrid.Columns[1].DataPropertyName = "B";
_staticGrid.Columns[2].DataPropertyName = "C";
_staticGrid.DataSource = new[] {
new { A = "someA", B = "someB", C = "someC"},
new { A = "someA", B = "someB", C = "someC"},
new { A = "someA", B = "someB", C = "someC"},
new { A = "someA", B = "someB", C = "someC"},
};
return _staticGrid;
}
}
然后像这样加载控件:
private void button1_Click(object sender, EventArgs e)
{
flowLayoutPanel1.Controls.Add(new UserControl1());
}