为什么我的Control不被复制(或至少不可见)?

时间:2014-06-02 18:07:17

标签: c# dynamic controls clone flowlayoutpanel

我正在尝试克隆一个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” - 但为什么它如此害羞和退休?

更新2

什么是odder(一个词是“odder”?如果不是,那就更奇怪了)就是在这段代码运行之后,FlowLayoutPanel已经从原来的位置消失了。怎么可能/为什么会这样?

更新3

我不知道我的问题的答案,所以我不是把它作为答案发布,但它是我问题的解决方案(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;
}

它有效 - 因为这是一个模型,我不需要控件,我只需要查看控件的外观,这就行了。

0 个答案:

没有答案