c#中的下拉菜单(位置和使用)

时间:2017-06-17 19:06:40

标签: c# forms button dropdown linqpad

对于我在学校的项目,我必须创建一个带有菜单的窗口和程序,对于菜单,我需要有一个下拉菜单。 下拉菜单可以正常工作,但是,我似乎无法进入窗口的下半部分。 这是我的代码:

    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#的这一部分的新内容进行操作。

1 个答案:

答案 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”。当它甚至有点不清楚时,请写出实际的类型。