Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的控件没有被复制(或者至少不可见)?_C#_Dynamic_Controls_Clone_Flowlayoutpanel - Fatal编程技术网

C# 为什么我的控件没有被复制(或者至少不可见)?

C# 为什么我的控件没有被复制(或者至少不可见)?,c#,dynamic,controls,clone,flowlayoutpanel,C#,Dynamic,Controls,Clone,Flowlayoutpanel,我试图克隆一个FlowLayoutPanel,当然包括它上面的所有东西——几个不同的控件,并将其插入到选项卡页上。tabPageRow0选项卡页控件上有一个名为panelRow0的FlowLayoutPanle。我想复制它并将其放在另一个选项卡页上。然而,逐步通过代码: private void buttonShowMockupOfAllRows_Click(object sender, EventArgs e) { Control tabpageCtrl = this.tabContr

我试图克隆一个FlowLayoutPanel,当然包括它上面的所有东西——几个不同的控件,并将其插入到选项卡页上。tabPageRow0选项卡页控件上有一个名为panelRow0的FlowLayoutPanle。我想复制它并将其放在另一个选项卡页上。然而,逐步通过代码:

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,但FlowLayoutPanel在选项卡页上不可见。为什么不呢

使现代化 添加FlowLayoutPanel控件显然是因为我将代码更改为:

. . .
MessageBox.Show(tpMockup.Controls.Count.ToString());
tpMockup.Controls.Add(flp0);
MessageBox.Show(tpMockup.Controls.Count.ToString());
…我先看到1,然后看到2-但为什么它如此害羞和退休

更新2 更奇怪的是,更奇怪的词是什么?如果不是,则更奇怪的是,在该代码运行后,FlowLayoutPanel已从其原始位置消失。怎么可能/为什么会这样

更新3 我不知道我的问题的答案,所以我不会把它作为一个答案,但它是我问题的解决方案。我不再关心我的问题:

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;
}

它可以工作-因为这是一个模型,我不需要控件,我只需要看看控件是什么样子,这样就可以了。

我在您的示例中没有看到任何克隆代码。。。没有一个新的XXXX。你确定你发布了正确的代码吗?也许我的术语有错误或笨拙-可以说,我想复制和粘贴。你可能应该将克隆更改为复制代码或类似的东西。。。旁注:在运行时向两个不同的子集合添加控件只会带来麻烦。我想你是对的,请参阅更新2