我正在尝试克隆一个FlowLayoutPanel(当然包括它上面的几个不同的控件)并将其插入TabPage。 tabPageRow0(一个TabPage控件)上有一个名为“panelRow0”的FlowLayoutPanle。我想复制它并将其放在不同的TabPage上。然而,逐步完成代码:
private void buttonShowMockupOfAllRows_Click(object sender, EventArgs e)
{
Control tabpageCtrl = this.tabControl1.Controls["tabPageRow0"];
TabPage tp = tabpageCtrl as TabPage;
FlowLayoutPanel flp0 = tp.Controls["panelRow0"] as FlowLayoutPanel;
tabControl1.SelectedTab = tabPageUniMockup;
TabPage tpMockup = tabControl1.SelectedTab;
tpMockup.Controls.Add(flp0);
}
...虽然没有一个对象为null,但是在TabPage上看不到FlowLayoutPanel。为什么不呢?
显然添加了(FlowLayoutPanel)控件 ,因为我将代码更改为:
. . .
MessageBox.Show(tpMockup.Controls.Count.ToString());
tpMockup.Controls.Add(flp0);
MessageBox.Show(tpMockup.Controls.Count.ToString());
...我首先看到“1”,然后是“2” - 但为什么它如此害羞和退休?
什么是odder(一个词是“odder”?如果不是,那就更奇怪了)就是在这段代码运行之后,FlowLayoutPanel已经从原来的位置消失了。怎么可能/为什么会这样?
我不知道我的问题的答案,所以我不是把它作为答案发布,但它是我问题的解决方案(IOW,我不再关心我的问题了):< / p>
private void buttonShowMockupOfAllRows_Click(object sender, EventArgs e)
{
Control tabpageCtrl = this.tabControl1.Controls["tabPageRow0"];
TabPage tp = tabpageCtrl as TabPage;
FlowLayoutPanel flp0 = tp.Controls["panelRow0"] as FlowLayoutPanel;
tabControl1.SelectedTab = tabPageUniMockup;
Image img = PanelToBitmap(flp0);
pictureBox1.Image = img;
}
// From http://stackoverflow.com/questions/3181886/how-to-get-a-windows-forms-panel-as-a-bitmap-with-c
private static Image PanelToBitmap(Control pnl)
{
var bmp = new Bitmap(pnl.Width, pnl.Height);
pnl.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
return bmp;
}
它有效 - 因为这是一个模型,我不需要控件,我只需要查看控件的外观,这就行了。