2017-06-17 4 views
0

Pour mon projet à l'école, je dois créer une fenêtre et un programme qui a un menu, et pour le menu, j'ai besoin d'un menu déroulant. Le menu déroulant fonctionne et tout, cependant, je n'arrive pas à l'obtenir pour aller dans la partie inférieure de ma fenêtre. Voici mon code:Menu déroulant en C# (position et utilisation)

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(); 

Comme vous pouvez le voir, je l'ai essayé d'ajouter la hauteur, la largeur, gauche et coordonnées haut. Cependant, cela n'a fait aucune différence à l'endroit où la position de ce menu déroulant. J'ai utilisé un ToolBar et un ToolStrip et le résultat est le même; Je ne peux pas déplacer la position du bouton/menu déroulant.

Aussi si vous avez des suggestions sur la façon d'améliorer mon code, s'il vous plaît faites comme je suis nouveau dans cette partie de C#.

+0

Devez-vous le coder manuellement ?! Pourquoi n'utilisez-vous pas Visual Studio pour le concevoir visuellement? –

+0

Les barres d'outils sont conçues pour supposer qu'elles appartiennent à la partie supérieure de la fenêtre. Vous devrez définir sa propriété Dock sur DockStyle.None –

+0

@AZhitom, je supprimer votre balise "linqpad". Même si vous utilisez cet outil pour votre projet, ce n'est pas vraiment pertinent pour votre question. Ironiquement cependant, c'est l'étiquette qui m'a conduit ici. – pwilcox

Répondre

0

La première chose à considérer est que le nom de votre variable "DropDownMenu" est trompeur. Cette variable est une barre d'outils et non un menu déroulant. Lorsque vous effectuez une sélection dans le menu déroulant, le contrôle que vous utilisez est "Numéros". "Numbers" est vraiment ce qui devrait être appelé "DropDownMenu". Étant donné cela, je suppose que la raison pour laquelle vous ne pouvez pas modifier les propriétés Top et Left de votre barre d'outils est parce que c'est en fait une barre d'outils. Les barres d'outils vont juste à l'extrême de leurs conteneurs. Il n'a jamais de sens de les mettre au milieu. C'est étrange qu'ils aient même cette propriété, mais je suppose que c'est parce qu'ils héritent de "Contrôle". Le moteur de rendu doit simplement ignorer ces propriétés. Si vous devez vraiment l'avoir, jetez un coup d'oeil au commentaire de Hans Passant sous votre question.

Je ne travaille pas trop avec les contrôles Windows Forms, mais je me souviens que généralement vous êtes plus susceptible de vouloir "ComboBox" pour cela. Et placez la zone de liste déroulante directement sur votre formulaire, sans passer par les barres d'outils. Comme ceci:

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(); 

Aussi, puisque vous êtes nouveau, notez le style différent. Ce n'est pas particulièrement mieux, mais ça vaut le coup d'être connu. Définir les propriétés de cette manière m'aide à mieux bloquer les choses ensemble. En outre, il est généralement bon d'utiliser le mot-clé "var" quand il est douloureusement évident quel genre de variable que vous avez. Ainsi, par exemple, il est très clair que combo est un ComboBox. Par conséquent, j'utilise simplement "var". Quand c'est encore un peu flou, alors écrivez le type réel.