Question

J'ai une boîte d'image sur laquelle je dessine des trucs dessus en utilisant un bitmap (chargement de l'image bitmap comme image d'image après chaque changement de dessin).Maintenant, j'ai un bouton "Ajouter une note".ce bouton est quelque part dans le mainForm.Je veux que lorsque l'utilisateur clique sur ce bouton, le pointeur de la souris saute dans le contrôle Picturebox et ne se déplace pas hors de celui-ci à moins que l'utilisateur ait cliqué à l'intérieur du contrôle ou appuyé sur la touche Échap.Est-ce possible?

J'utilise ce code pour le moment:

    private void buttonAddNote_Click(object sender, EventArgs e)
    {
        Cursor = Cursors.Cross;
    }

Ou une meilleure approche pourrait être cette fois-ci lorsque l'utilisateur a cliqué sur ajouter un bouton de note, les clics de souris ne fonctionnent que dans le composant Picturebox (l'utilisateur IE ne peut pas cliquer ailleurs dans le programme)

Était-ce utile?

La solution

Une telle modalité dans une interface utilisateur est une très mauvaise idée.Mais Winforms le rend possible.Vous pouvez utiliser la propriété Cursor.Clip pour limiter le mouvement.Cela ne peut pas empêcher l'utilisateur d'accéder, par exemple, au menu Démarrer avec un raccourci clavier, vous devez utiliser la propriété Capture pour détecter que vous avez perdu.

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        pictureBox1.MouseCaptureChanged += new EventHandler(pictureBox1_MouseCaptureChanged);
        pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
        button1.Click += new EventHandler(button1_Click);
    }

    private void button1_Click(object sender, EventArgs e) {
        var rc = pictureBox1.RectangleToScreen(new Rectangle(Point.Empty, pictureBox1.ClientSize));
        Cursor.Position = new Point(rc.Left + rc.Width / 2, rc.Top + rc.Height / 2);
        Cursor.Clip = rc;
        pictureBox1.Capture = true;
        pictureBox1.Cursor = Cursors.Cross;
    }

    void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
        pictureBox1.Capture = false;
    }

    void pictureBox1_MouseCaptureChanged(object sender, EventArgs e) {
        if (!pictureBox1.Capture) {
            pictureBox1.Cursor = Cursors.Default;
            Cursor.Clip = new Rectangle(0, 0, 0, 0);
        }
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == Keys.Escape) pictureBox1.Capture = false;
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

Autres conseils

Sur le deuxième, vous avez raison sur les limitations des utilisateurs, c'est pourquoi j'ai eu cette idée.Mais merci beaucoup de m'avoir montré comment verrouiller les souris des utilisateurs !!!X)

    public addNote = false;

    private void buttonAddNote_Click(object sender, EventArgs e)
    {
        if (!addNote)
            addNote = true;
        else addNote = false;
    }

    private void curveBox_MouseMove(object sender, MouseEventArgs e)
    {
        if (addNote)
        {
            Cursor = Cursors.Cross;
        }
    }

    private void curveBox_MouseLeave(object sender, EventArgs e)
    {
        Cursor = Cursors.Default;
        addNote = false;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top