Я пытаюсь клонировать FlowLayoutPanel (включая, конечно, все на нем — несколько разных элементов управления) и вставлять его на TabPage. tabPageRow0 (элемент управления TabPage) имеет FlowLayoutPanle с именем «panelRow0». Я хочу скопировать его и поместить на другую вкладку. Тем не менее, шагая по коду:
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);
}
... хотя ни один из объектов не является нулевым, панель FlowLayoutPanel не отображается на вкладке TabPage. Почему нет?
ОБНОВИТЬ
Элемент управления (FlowLayoutPanel) добавляется, по-видимому, потому что я изменил код следующим образом:
. . .
MessageBox.Show(tpMockup.Controls.Count.ToString());
tpMockup.Controls.Add(flp0);
MessageBox.Show(tpMockup.Controls.Count.ToString());
...и я вижу сначала "1", потом "2" - но почему он такой застенчивый и уединенный?
ОБНОВЛЕНИЕ 2
Что еще более странно (слово «страннее»? Если это не так, то оно еще более странное), так это то, что после запуска этого кода панель FlowLayoutPanel исчезла из своего исходного местоположения. Как это могло быть/почему?
ОБНОВЛЕНИЕ 3
Я не знаю ответа на свой вопрос, поэтому я не публикую это как ответ, но это решение моей проблемы (IOW, меня больше не волнует мой вопрос):
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;
}
Это работает — поскольку это макет, мне не нужны элементы управления, мне просто нужно посмотреть, как они выглядят, и это помогает.
new XXXX
). Вы уверены, что разместили правильный код? - person Alexei Levenkov   schedule 02.06.2014