J'ai un petit formulaire pour peindre une grille. Mais lorsque je le redimensionne, ce que je veux dire en faisant glisser le bord du formulaire, il y a quelque chose qui ne va pas avec ma grille. ci-dessous est l'image :entrez la description de l'image ici

Comme vous pouvez le voir, le formulaire continue de le repeindre lorsque je maintiens le bouton de la souris enfoncé. Je pense que je peux résoudre le problème en modifiant la façon dont l'événement de redimensionnement appelle l'événement repaint. Y a-t-il de toute façon que l'événement repaint ne soit appelé qu'après avoir relâché le bouton de la souris ?

Voici le code instantané de la façon dont je dessine la grille:

 private void PictureBox_paint(object sender, PaintEventArgs e)
    {

        viewsizeX = pictureBox.Width;
        viewsizeY = pictureBox.Height;
        cellSizeX = 50;
        cellSizeY = 50;
        numOfCellsX = (viewsizeX - (viewsizeX % cellSizeX)) / cellSizeX;
        numOfCellsY = (viewsizeY - (viewsizeY % cellSizeY)) / cellSizeY;


        // draw horizontal lines of gird
        for (int y = 0; y <= numOfCellsY; ++y)
        {
            g.DrawLine(bgp, 0, y * cellSizeY, viewsizeX, y * cellSizeY);
        }
        // draw vertical lines of gri, +6 because here we are drawing 6 more lines on the right of the grid for further moving.
        for (int x = 1; x <= numOfCellsX * 2; ++x)
        {
            int position = (x * cellSizeX) + changeValue;
            if (position >= 0 && position <= viewsizeX)
            {
                g.DrawLine(bgp, position, 0, position, viewsizeY);
            }
        }

Ma liste d'événements : entrez la description de l'image ici

1
oocharlesxx 23 févr. 2020 à 08:39

1 réponse

Meilleure réponse

Répondez aux événements ResizeBegin et ResizeEnd. Un péché:

private disablePaint = false;

private void MyForm_ResizeBegin(object sender, EventArgs e) {
    disablePaint = true;
}

private void MyForm_ResizeEnd(object sender, EventArgs e) {
    disablePaint = false;
}

private void PictureBox_paint(object sender, PaintEventArgs e) {
    if (disablePaint) return;

    // your paint code here
}

Ne peignez pas pendant le redimensionnement. Notez l'utilisation du drapeau disablePaint.

1
AngryHacker 23 févr. 2020 à 05:49