如何绕过C#(WinfForms)中缺少布局和JPanel的问题

如何绕过C#(WinfForms)中缺少布局和JPanel的问题,c#,java,winforms,layout,C#,Java,Winforms,Layout,问题:如何在C#(WinForms)中实现它 EDIT1:我使用Visual Studio 2013,但我不想使用任何设计器,只使用普通代码 EDIT2:在下面的示例中,面板和按钮会调整自身大小以适应面板 我正在创建一个UserControl(WinForms),该实例的大小将调整很多,我不希望当大小改变时,该UserControl中的按钮不可见 在主UserControl中将有2个UserControls,一个在中间,一个在底部,包含2个按钮(下面是用Java编写的该想法的屏幕截图) 我将用J

问题:如何在C#(WinForms)中实现它

EDIT1:我使用Visual Studio 2013,但我不想使用任何设计器,只使用普通代码

EDIT2:在下面的示例中,面板和按钮会调整自身大小以适应面板

我正在创建一个
UserControl
(WinForms),该实例的大小将调整很多,我不希望当大小改变时,该
UserControl
中的按钮不可见

在主
UserControl
中将有2个
UserControls
,一个在中间,一个在底部,包含2个
按钮(下面是用Java编写的该想法的屏幕截图)

我将用Java编写:

public class LayoutDemo extends JFrame {
JPanel centerPanel, lowerPanel;
    public LayoutDemo(){
        super();
    }

    private void createGUI(){
        setSize(400,400);
        setLayout(new BorderLayout());

        centerPanel = new JPanel();
        centerPanel.setBorder(new LineBorder(Color.blue, 4));

        lowerPanel = new JPanel();
        lowerPanel.setBorder(new LineBorder(Color.green, 4));
        lowerPanel.setLayout(new GridLayout());
        lowerPanel.add(new JButton("PLAY"));
        lowerPanel.add(new JButton("STOP"));

        add(centerPanel, BorderLayout.CENTER);
        add(lowerPanel, BorderLayout.SOUTH);

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {     
            @Override
            public void run() {
                new LayoutDemo().createGUI();           
            }
        });
    }
}
结果是,无论什么组件“知道它们的位置”,它们都会自动调整大小


但如何在C#中实现它?

在按钮面板上,将Dock设置为底部;在另一个面板上,设置Dock=Fill(注意,创建/设置事物的顺序会涉及)。这确保了他们留在原地。然后将顶部面板上的锚定设置为顶部、左侧、右侧、底部,并将按钮面板上的锚定设置为左侧和右侧。这样可以调整大小。

您使用的是设计师吗。如果是,是哪一个(Visual Studio等)?我使用VS2013,但不想使用任何拖放设计器。好的,但是如何在UserControl中插入UserControl我的工具箱中没有UserControl如果你都是在代码中完成的,那么就创建它并把它放在代码中。。否则IIRC(我上次做UserControl已经很久了),从解决方案资源管理器中将它拖到表单上。要将其添加到工具箱,请右键单击工具箱,选择“选择项”并浏览包含UserControls的dll。好的,我使用了工具箱,锚定和对接做得很好。。。例如,在
GridLayou
-->图像中,按钮上方的大小会自动调整,以填充所有
lowerPanel
。你知道怎么处理吗?没那么容易。将左侧的锚定在左侧,将右侧的锚定在右侧。这是最简单的部分。在UserControl Resize事件中,将两个按钮的宽度都设置为面板宽度的1/2。恐怕这就是我所能想到的。可能值得设置另一个问题,确切地问这个问题,因为我做了这件事已经有一段时间了,可能已经忘记了。在
UserControl\u Resize
事件中,输入以下代码:
ButtonPlay.Width=lowerPanel.Width/2
按钮stop.Width=lowerPanel.Width/2