对于我在学校的项目,我必须创建一个带有菜单的窗口和程序,对于菜单,我需要有一个下拉菜单。 下拉菜单可以正常工作,但是,我似乎无法进入窗口的下半部分。 这是我的代码:
var MenuWindow = new Form();
MenuWindow.Height = 300;
MenuWindow.Width = 300;
MenuWindow.Text = "Menu";
ToolBarButton Numbers = new ToolBarButton("Number of players");
ToolBar DropDownMenu = new ToolBar();
MenuItem menuItem1 = new MenuItem("1");
MenuItem menuItem2 = new MenuItem("2");
ContextMenu ContentsOfMenu = new ContextMenu(new MenuItem[] { menuItem1, menuItem2 });
DropDownMenu.Buttons.Add(Numbers);
Numbers.Style = ToolBarButtonStyle.DropDownButton;
Numbers.DropDownMenu = ContentsOfMenu;
DropDownMenu.Left = 95;
DropDownMenu.Top = 215;
DropDownMenu.Width = 100;
DropDownMenu.Height = 10;
MenuWindow.Controls.Add(DropDownMenu);
MenuWindow.Show();
如您所见,我尝试添加高度,宽度,左侧和顶部坐标。但是,这与此下拉菜单的位置没有区别。 我使用了ToolBar和ToolStrip,结果是一样的;我无法移动按钮/下拉菜单的位置。
另外,如果您对如何改进我的代码有任何建议,请按照我对c#的这一部分的新内容进行操作。
答案 0 :(得分:0)
首先要考虑的是变量“DropDownMenu”的名称具有误导性。该变量是ToolBar,而不是下拉菜单。当您实际从表单上的下拉列表中进行选择时,您使用的控件是“Numbers”。 “数字”实际上应该被称为“DropDownMenu”。
鉴于此,我怀疑你无法更改工具栏的Top和Left属性的原因是因为它实际上是一个工具栏。工具栏只是放在容器的极端。把它们放在中间是没有意义的。奇怪的是他们甚至拥有这个属性,但我猜这是因为他们继承了“控制”。渲染引擎必须简单地忽略这些属性。如果你真的必须这样做,请看看Hans Passant在你的问题下的评论。
我对Windows Forms Controls的工作量不大,但我记得通常你更有可能想要“ComboBox”。并将组合框直接放在表单上,绕过任何工具栏。像这样:
var label =
new Label() {
Text = "Players",
Top = 20,
Left = 20,
Width = 75
};
var combo =
new ComboBox() {
Left = label.Left + label.Width,
Top = label.Top,
Width = 150,
Height = 10
};
combo.Items.Add("1");
combo.Items.Add("2");
var MenuWindow =
new Form() {
Height = 100,
Width = 300,
Text = "Menu"
};
MenuWindow.Controls.Add(combo);
MenuWindow.Controls.Add(label);
MenuWindow.Show();
此外,既然你是新手,请注意不同的风格。它并不是特别好,但值得了解。以这种方式设置属性可以帮助我更好地阻止事物。此外,通常可以使用“var”关键字,因为很明显你有什么样的变量。因此,例如,很明显combo是一个ComboBox。因此我只使用“var”。当它甚至有点不清楚时,请写出实际的类型。