1
votes

La position du curseur C # ne fonctionne pas sur PictureBox

Je voudrais obtenir la position du curseur sur le formulaire.

Le code ci-dessous fonctionne, mais pas lorsque le curseur est positionné sur une ou plusieurs PictureBox.

J'ai donc besoin d'aide à ce sujet. p>

Merci!

protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);

    Point p = Cursor.Position;

    label1.Text = "x= " + p.X.ToString();
    label2.Text = "y= " + p.Y.ToString();
}


1 commentaires

Jetez un œil à cette question .


3 Réponses :


0
votes

Je suppose que c'est parce que vous ne remplacez que la méthode OnMouseMove de votre formulaire. Pour capturer l'événement de déplacement de la souris dans votre zone d'image (ou tout contrôle), utilisez MouseMove - Event du contrôle.

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    Point p = Cursor.Position;

    label1.Text = "x= " + p.X.ToString();
    label2.Text = "y= " + p.Y.ToString();
}


0 commentaires

1
votes

Vous devez vous abonner à l'événement MouseMove de cette zone d'image et y appeler votre méthode.

// in Form1.cs

protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);

    Point p = Cursor.Position;

    label1.Text = "x= " + p.X.ToString();
    label2.Text = "y= " + p.Y.ToString();
}

class Form1ControlCollection : ControlCollection
{
    Form1 owner;
    internal Form1ControlCollection(Form1 owner) : base(owner)
    {
        this.owner = owner;
    }

    public override void Add(Control value)
    {
        base.Add(value);
        value.MouseMove += Value_MouseMove;
    }

    private void Value_MouseMove(object sender, MouseEventArgs e)
    {
        owner.OnMouseMove(e);
    }
}

protected override Control.ControlCollection CreateControlsInstance()
{
    return new Form1ControlCollection(this);
}

Ou vous pouvez remplacer CreateControlsInstance code> pour renvoyer une collection de contrôles personnalisés qui s'abonnera à l'événement MouseMove de chaque contrôle enfant

// in Form1.cs

private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    OnMouseMove(e);
}

Ajoutez cet extrait dans votre formulaire


0 commentaires

0
votes

Merci les gars!

Cela fonctionne pour moi.

In protected override void OnMouseMove (MouseEventArgs e) vous pouvez utiliser le code de commentaire ou de décommenter

private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        OnMouseMove(e);
    }

    private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
    {
        OnMouseMove(e);
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        //base.OnMouseMove(e);

        //Point p = Cursor.Position;

        //label1.Text = "x= " + p.X.ToString();
        //label2.Text = "y= " + p.Y.ToString();

        label1.Text = "x= " + e.X.ToString();
        label2.Text = "y= " + e.Y.ToString();        
    }


0 commentaires