7
votes

Menu contextuel personnalisé

J'aimerais créer un menu contextuel personnalisé. L'idée est de créer un panneau avec une touche TEXTBOX A et une liste d'étiquettes et de pouvoir le montrer sur un clic droit et de le faire se comporter exactement comme un contextMenu. Je peux probablement utiliser un formulaire sans frontières, mais je pensais qu'il pourrait y avoir une classe, je peux dériver de cela qui m'aiderait à gérer le positionnement du menu contextuel et de l'ombrage. Des idées? Merci

Edit: Un exemple pour effacer quelques idées: dites que vous avez une étiquette sur votre formulaire, lorsque vous cliquez avec le bouton droit de la souris sur celui-ci (ou même à gauche) Un menu apparaît. Ce menu n'est pas le menu contextuel classique mais plutôt un panneau personnalisé avec des contrôles que j'ai créés personnaly. Un exemple est la zone de recherche sur une liste d'éléments. Lorsque vous entrez des lettres, la liste est coupée sur les éléments correspondants et lorsqu'un élément est cliqué sur le menu contextuel disparaît et la valeur sélectionnée est writs dans l'étiquette que nous avons cliqué sur.


5 commentaires

Je suppose que tu parles de Winforms ici?


Clairement, vous avez manqué le contrôle contextmentrip dans la boîte à outils.


Non, je n'ai pas manqué cela, je veux créer le mien qui fait plus d'un élément parmi beaucoup. Et oui, il s'agit de Winforms en C #.


Je créerais un formulaire personnalisé sans frontières comme vous l'avez écrit.


Est-ce que ça va être un contexte réel menu contenant des éléments de menu personnalisés, ou ce n'est pas un menu du tout? Vous devez expliquer comment cela devrait se comporter et ressembler à des suggestions.


3 Réponses :


4
votes

Le moyen le plus simple (puisque cela ne semble pas être un menu réel) serait de créer une forme sans bordure et d'ajouter une ombre à celle-ci: xxx pré>

en ce qui concerne la position, il n'y a pas beaucoup à cela. Vérifiez simplement curseur.Position CODE> ou définissez les coordonnées à l'aide des arguments dans votre code> MouseUp CODE> Mousilleur. P>

Code complet ressemblerait à quelque chose comme: p> xxx pré>

et pour le formulaire "MENU": P>

public partial class CustomMenu : Form
{
    public CustomMenu()
    {
        InitializeComponent();
        this.StartPosition = FormStartPosition.Manual;
    }

    private const int CS_DROPSHADOW = 0x00020000;
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ClassStyle |= CS_DROPSHADOW;
            return cp;
        }
    }

    protected override void OnLostFocus(EventArgs e)
    {
        this.Close();
        base.OnLostFocus(e);
    }
}


1 commentaires

Je pensais que en dérivant d'une certaine classe, mon menu personnalisé pourrait être utilisé comme un contextMenu en mode de conception. Mais oui, je suis d'accord que cela peut faire le travail. Merci. Lorsque vous cliquez devant un contexte, il disparaît, comment géreriez-vous cela dans votre exemple?



5
votes

Vous pouvez utiliser la méthode décrite ici:

http: / /www.codeproject.com/articles/22780/super-Context-Menu-strip p>

Comme il utilise le contextMenustripa, vous pouvez définir sa position: P>

contextMenuStrip1.Show(Cursor.Position);


0 commentaires

0
votes

Lorsque vous cliquez à l'extérieur du contexteMenu, il disparaît. Oui. Avec ce Custommenu, vous pouvez aussi faire cela. XXX

J'ai testé cela et cela a fonctionné bien pour moi. Onleave et OnlostFocus ne se déroulent pas lorsque vous cliquez sur le formulaire.


0 commentaires