De Windows.Forme de bouton avec menu déroulant
Je suis le développement de la simple application en C# à l'aide de Windows.Formes sur .NET. J'ai besoin d'un bouton permettant d'afficher un menu déroulant avec des sous-catégories, comme pour la ToolStripMenu, mais le bouton, vous savez. J'ai cherché pour elle et ne pouvait pas trouver toutes les variantes.
Ma question est: est-il possible de le faire, peut-être quelques secrets bouton de la propriété qui permet de menu joindre à elle?
Toute aide sera appréciée.
InformationsquelleAutor tonytony | 2012-05-29
Vous devez vous connecter pour publier un commentaire.
Vous pouvez afficher le ContextMenuStrip sur l'événement click:
Faire votre propre décision pour afficher le menu ci-dessus ou en-dessous du bouton, vous pouvez essayer d'utiliser ce code, qui mesure le menu et détermine si oui ou non il serait partiellement hors de l'écran:
Bouton ont flèche en bas à droite côté d'elle et vous pouvez définir le menu de la part du concepteur:
Avec ShowMenuUnderCursor:
MenuButton classe:
Menu
's la valeur est toujoursnull
, peu importe comment définir laContextMenuStrip
la valeur de la propriété?Menu
propriété, et non laContextMenuStrip
de la propriété.myButton.Menu = New ContextMenuStrip
.. vous avez probablement faitmyButton.ContextMenuStrip = New ContextMenuStrip
OnPaint
événement au lieu d'hériter deButton
, n'oubliez pas d'utiliser le bouton de dimensions et de ne pasClientRectangle
s'. Comme ceci:Button btnSender = (Button)sender; int arrowX = btnSender.Width - 14; int arrowY = btnSender.Height / 2 - 1;
Expansion @Jaex répondre un peu pour permettre à un séparateur de ligne, à condition dessin de la flèche, si rien n'est configuré et un autre événement click pour le bouton principal corps et la flèche du menu.
Il convient de noter que, pour un meilleur alignement vous pouvez définir la
button.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
Voici ma légère amélioration
var splitRect = new Rectangle(this.Width - this.SplitWidth, this.Location.Y, this.SplitWidth, this.Height);
le deuxième paramètre doit être modifié pour 0using (var separatorPen = new Pen(Brushes.DarkGray) { DashStyle = System.Drawing.Drawing2D.DashStyle.Dot })
de Cette façon, il ne nécessite pas d'avoir de la bibliothèque.facile, c'est que nous pouvons le faire. cela peut aider 🙂
L'option la plus simple serait d'utiliser le ToolStripDropDownButton dans une détaché ToolStrip qui ne montre que le seul bouton. Ensuite, vous pouvez ajouter des sous-éléments, etc. Pour ce faire:
- faites glisser un Toolstrip sur votre contrôle/forme
- utiliser la mise en page de l'aide pour ajouter un DropDownButton
- définir GripStyle Cachés
- définir le Socle à Aucun
Le résultat est un développement autonome de la barre d'outils de style bouton qui prend en charge le déroulante comportement que vous avez décrit.
Montrer menu contextuel bouton ci-dessous lorsqu'il est cliqué.
Jaex de MenuButton classe ci-dessus a été parfait pour moi. J'ai ajouté la logique ci-dessous dans le OnMouseDown, de sorte que le menu contextuel ne ferait que montrer si j'ai cliqué sur la flèche. Le normal, cliquez sur l'événement allait se déclencher si j'ai cliqué dans la plus grande partie. Permis pour un "Défaut", cliquez sur action.
Pensé que cela pourrait être utile à quelqu'un. Grâce Jaex
Infragistics a la WinDropDownButton: http://help.infragistics.com/Help/NetAdvantage/WinForms/2012.1/CLR2.0/html/WinDropDownButton_About_WinDropDownButton.html
Donc il existe certainement, mais vous ne pouvez pas être à la recherche d'un contrôle de tiers.
J'ai été jouer avec ce problème et trouvé une solution extrêmement simple (mais un peu sales-hacky): placez un
ComboBox
en vertu de laButton
, telle qu'elle indique la flèche de menu déroulant à droite à côté du bouton.Ensuite utiliser
SelectedIndexChanged
de laComboBox
pour changer leButton
comportement, ou faire ce que vous voulez qu'il fasse immédiatement.TabStop
àFalse
sur leComboBox
et attraper la flèche vers le bas sur laButton
?