如何绕过C#(WinfForms)中缺少布局和JPanel的问题
问题:如何在C#(WinForms)中实现它 EDIT1:我使用Visual Studio 2013,但我不想使用任何设计器,只使用普通代码 EDIT2:在下面的示例中,面板和按钮会调整自身大小以适应面板 我正在创建一个如何绕过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
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代码>