7
votes

Comment faire un contrôle flottant

Je voudrais créer un contrôle des flotteurs (potentiellement) en dehors des limites de sa forme contenant. Est-ce possible? Comment puis-je le faire?

Cela fonctionnerait beaucoup comme le menu contextuel que je n'ai besoin de pouvoir ajouter d'autres contrôles tels que des boutons et des images.


0 commentaires

7 Réponses :


0
votes

Il aurait besoin d'une fenêtre séparée (beaucoup comme un menu contextuel est réellement) - vous pouvez l'envelopper comme un contrôle, qui affiche une forme sans refuge (ce qui vous donnerait même l'option pour des fenêtres non rectangulaires si vous < em> vraiment voulait). Comme vous pouvez créer la fenêtre d'un contrôle non visible de la forme parent, vous pouvez conserver une référence à l'enfant pour la manipulation de la communication inter-formulaire.


1 commentaires

Comment allais-je faire cela?



2
votes

Jetez un oeil à la Suite DockPanel source et adoptez la technique.


3 commentaires

Comment un dockpanel float [S] ... en dehors des limites de sa forme [sic] contenant forme ?


@Nelson: Ce projet mentionné implémente le concept de panneaux flottants et amassés, comme dans Visual Studio. Ils sont implémentés comme une forme mais peuvent être représentés comme un panneau régulier dans un conteneur.


Vous avez raison, mais je ne pense pas que c'est tout à fait ce que l'OP avait en tête basé sur la réponse acceptée. Quoi qu'il en soit, le dockpanel est agréable pour beaucoup de choses.



4
votes

Il est possible, la propriété Toplevel contrôle ceci. Cependant, le concepteur ne les supporte pas bien, difficile à maintenir le contrôle des contrôles de contrôle des fenêtres de haut niveau au moment de la conception.

Au-delà des composants tels que ToolTip et contextMentrip, il existe exactement une classe de niveau supérieur par design, la classe de formulaire. Définissez sa formulaire de formulaire sur None and Controlbox sur FALSE pour créer une fenêtre de base de base que vous pouvez utiliser et peupler avec d'autres commandes.


0 commentaires

5
votes

Vous voulez un formulaire avec son formulaire de formulaire, si vous voulez qu'il se comporte comme un menu contextuel, vous devez le faire l'afficher sur le gestionnaire d'événements approprié sur votre formulaire principal. Exemple simple ci-dessous dans la définition de l'emplacement et de l'appel du spectacle d'un facteur d'événement de clic de souris.

MyForm form = new MyForm();
form.Location = PointToScreen(new Point(e.X, e.Y));
form.Show();


0 commentaires

0
votes

avoir votre usercontrol code> remplacer créeparams code>. Par exemple:

[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
public static extern IntPtr GetDesktopWindow();

protected override CreateParams CreateParams
{
    get
    {
        var cp = base.CreateParams;
        cp.ExStyle &= 0x00080000; // WS_EX_LAYERED
        cp.Style = 0x40000000 | 0x4000000; // WS_CHILD | WS_CLIPSIBLINGS
        cp.Parent = GetDesktopWindow(); 
        return cp;
    }
}


0 commentaires

-1
votes

Ceci a fonctionné pour moi xxx

}


0 commentaires

1
votes

Voici vous pouvez faire pour tous les styles de flotte de contrôle

    private void Panel_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            Panel.Left += e.X - PanelMouseDownLocation.X;
            Panel.Top += e.Y - PanelMouseDownLocation.Y;
        }
    }
    private void Panel_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left) PanelMouseDownLocation = e.Location;
    }


public Point PanelMouseDownLocation { get; set; }


0 commentaires