/ / Ako sa dostať PictureBox MouseDown udalosť do práce? - c #, winforms

Ako získať funkciu MouseDown funkcie PictureBox? - c #, winforms

Mám jednoduchý 2d editor máp a mapa je mriežkou PictureBoxov.

        for (int row = 0; row < GlobalConstants.TileRows; row++)
{
for (int col = 0; col < GlobalConstants.TileCols; col++)
{
PictureBox pb = new PictureBox();
pb.Size = size;
Point loc = new Point(GlobalConstants.TileWidth * col, GlobalConstants.TileHeight * row);
Rectangle srcRect = new Rectangle(loc, size);
pb.Location = loc;
pb.Tag = loc;
pb.Name = String.Format("Col={0:00}-Row={1:00}", col, row);
pb.MouseDown += pbMap_MouseDown;
pb.MouseUp += pbMap_MouseUp;
pb.MouseEnter += pbMap_MouseEnter;
pnlMap.Controls.Add(pb);
}
}

Existujú tri udalosti myši:

MouseDown: Stlacením tlacidla PictureBox sa obraz zaplní vybranou polozkou. m_mouseDown je tu nastavený na true.

MouseUp: m_mouseDown je nastavené na false.

MouseEnter: Kým m_mouseDown je true, použite aktuálne zvolenú dlaždicu a aktualizujte obrazový obrázok.

Mám problém s nástrojom MouseEnter:

    private void pbMap_MouseEnter(object sender, EventArgs e)
{
if (m_mouseDown)
{
PictureBox pb;

pb = (PictureBox)sender;

if (m_pbSelected != null)
{
pb.Tag = m_pbSelected.Tag;
pb.Name = m_pbSelected.Name;
pb.Image = m_pbSelected.Image;
}
}
}

Kým sa objaví prvý obrázok PictureBoxMouseDown, držím tlačidlo myši a ťahám myšou nadol. Pictureboxy, do ktorých moja myš vstupuje, nie sú aktualizované. Aktualizujú sa len na jedno kliknutie, ale chcel by som, aby sa aktualizovali, keď je tlačidlo myši stlačené.

Ak odstránim podmienku if (m_mouseDown),PictureBoxy aktualizujú obraz na vybraný obrázok. Samozrejme, nemôžem tlačiť žiadne tlačidlá na myši, keď som sa pohybovať. Keď som dal podmienku späť, len jedna obrazová krabička sa aktualizuje na udalosti MouseDown.

Kód myši hore / dole:

    /// <summary>
/// Map panel"s mouse down event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pbMap_MouseDown(object sender, EventArgs e)
{
m_mouseDown = true;

MouseEventArgs m = (MouseEventArgs)e;
PictureBox pb;

if (m.X >= (GlobalConstants.TileWidth * GlobalConstants.TileCols))
return;

if (m.Y >= (GlobalConstants.TileHeight * GlobalConstants.TileRows))
return;

pb = (PictureBox)sender;

if (m_pbSelected != null)
{
pb.Tag = m_pbSelected.Tag;
pb.Name = m_pbSelected.Name;
pb.Image = m_pbSelected.Image;
}
}

/// <summary>
/// Map panel"s mouse up event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pbMap_MouseUp(object sender, EventArgs e)
{
m_mouseDown = false;
}

Ak je dôležité spomenúť, obrazové boxy sú v ovládacom paneli. Panel nemá žiadne udalosti myši.

Akékoľvek nápady sú ocenené. Vďaka.

odpovede:

0 pre odpoveď č. 1

Môžete vytvoriť časovač na aktualizáciu pozície obrázka na pozíciu kurzora myši a zastaviť časovač na myši.