Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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#_.net_Winforms_Layout - Fatal编程技术网

C# 控件的多个布局

C# 控件的多个布局,c#,.net,winforms,layout,C#,.net,Winforms,Layout,我有一个WinForms应用程序,在这一点上是全功能的,大约有15-20个元素。我希望能够在两个视图之间切换,一个是“扩展”视图,另一个是“简单”视图 “扩展”视图将与现在完全相同,“简单”视图将隐藏除1个控件以外的所有控件,并添加5个附加控件 最好的办法是什么?我认为仅仅设置.Visible属性一个接一个地隐藏东西不是很好的做法。我也不希望有任何重复的控制或代码 很明显,我应该在一开始就考虑这个问题,但我刚刚想到了这个需要。任何指向正确方向的指示都将不胜感激 在应用程序中添加两个面板控件,并将

我有一个WinForms应用程序,在这一点上是全功能的,大约有15-20个元素。我希望能够在两个视图之间切换,一个是“扩展”视图,另一个是“简单”视图

“扩展”视图将与现在完全相同,“简单”视图将隐藏除1个控件以外的所有控件,并添加5个附加控件

最好的办法是什么?我认为仅仅设置
.Visible
属性一个接一个地隐藏东西不是很好的做法。我也不希望有任何重复的控制或代码


很明显,我应该在一开始就考虑这个问题,但我刚刚想到了这个需要。任何指向正确方向的指示都将不胜感激

在应用程序中添加两个面板控件,并将所有“简单”控件放在一个面板上,将所有“扩展”控件放在第二个面板上

Panel panelSimple = new Panel();
panelSimple.Location = new Point(1,1);
panelSimple.Size = new Size(500,500);
panelSimple.Controls.Add(simpleTexbox); 
panelSimple.Controls.Add...

Panel panelExtended= new Panel();
panelExtended.Location = new Point(1,1);
panelExtended.Size = new Size(500,500);
panelExtended.Controls.Add(extendedButton); 
panelExtended.Controls.Add...

然后根据需要将面板的.Visible标志设置为false或true(您需要确保两者不会同时可见或不可见)

这就是我最后要做的。我有两个大小和位置相同的面板,
axWindowsMediaPlayer
是我想在这两个面板上使用的控件:

if (panelExtendedLayout.Visible)
{
    panelSimpleLayout.Visible = false;
    panelExtendedLayout.Visible = true;

    panelExtendedLayout.Controls.Remove(axWindowsMediaPlayer);
    panelSimpleLayout.Controls.Add(axWindowsMediaPlayer);
}
else
{
    panelSimpleLayout.Visible = true;
    panelExtendedLayout.Visible = false;

    panelExtendedLayout.Controls.Remove(axWindowsMediaPlayer);
    panelSimpleLayout.Controls.Add(axWindowsMediaPlayer);
}

它可以工作,看起来非常无缝,视频可以继续播放,所有其他控件只需单击一个按钮即可显示/消失。我确实遇到了一个初始问题,
panelSimiple
被设置为
panelExtended
的子对象,由于我将其拖放到同一空间,我不得不在设计代码中对其进行编辑。

我认为
Panel
容器控件可以在这方面有所帮助。您可以根据自己的要求显示和隐藏面板。也可以是一个GroupBox,两者的用法非常相似。或者您可以使用选项卡控件。有很多不同的选择,它们都有各自的优点。我从理论上理解你的意思,只是在实现上有点困难。我如何从我目前拥有的东西发展到你的建议?当我已经创建了所有项目时,我无法完全理解如何将它们添加到代码中的面板中。@blawford刚设置了control.parent=panel。@blawford我想你是在GUI中添加了所有这些控件,对吗?然后你可以用这个做同样的事情。只需将左侧下拉菜单中的两个面板控件添加到应用程序中,并将它们在propreties窗口中的位置和大小设置为相同的值。然后将控件(文本框、按钮等)放在面板上。问题是,如果两个面板上都有控件,则需要为其复制所有内容,而如果在代码中创建所有表单,则更容易跟踪所有内容。我可以让你写一些简短的代码,如果你想有两个面板,所有当前添加到第一个面板。我已经在第二个面板中添加了一个控件,但它在运行时没有显示在那里。你能给我一个例子,说明如何将第一个面板上的控件添加到第二个面板上吗?当你说“为它复制一切”是什么意思?我不希望在代码中手动创建每个控件。如果你想看到第二个面板,第一个面板在第二个面板上,你需要隐藏第一个面板,反之亦然,如果你设置它们的位置和大小相同。作为复制,我的意思是,你要么需要创建另一个文本框,按钮等,设置与第一个面板上的设置相同,然后把它放在第二个面板上。这就是为什么如果你用编程的方式创建它们会更好的原因,然后你就可以很容易地创建它们的两个实例