私は単純な2dマップエディタを持っており、マップはピクチャボックスのグリッドです。PictureBoxのMouseDownイベントを機能させるには?
のMouseDown:
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);
}
}
3つのマウスイベントがあり、ピクチャを下に押すと、選択した項目で画像を埋めます。 m_mouseDownはここではtrueに設定されています。
MouseUp:m_mouseDownがfalseに設定されています。
MouseEnter:m_mouseDownがtrueの間、現在選択されているタイルを使用して、ピクチャボックスイメージを更新します。私はのMouseEnterに問題を抱えている
:最初のPictureBoxの画像がMouseDownイベント上に示しているが
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;
}
}
}
、私がダウンして、マウスボタンを保持し、下方向にマウスをドラッグします。マウスが入力したピクチャボックスは更新されません。クリック1回で更新されるだけですが、マウスボタンを押したまま更新してもらいたいです。
if(m_mouseDown)条件を削除すると、ピクチャボックスはイメージを選択したイメージに更新します。もちろん、私はそれを移動している間、マウスのボタンを押さない。条件を戻すと、MouseDownイベントで1つのピクチャボックスしか更新されません。
私のマウスのアップ/ダウンコード:
/// <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;
}
それは言及することが重要だ場合は、pictureboxesは、パネルコントロール内にあります。パネルにマウスイベントはありません。
アイデアをいただければ幸いです。ありがとう。
ボタンが押し下げられている間、マウスがコントロールされているため、マウスが動かなくなります。 mouseUpはマウスが実際にある場所ではなく、元のコントロールにのみ発生します。 - それらはルールです。回避しようとする前に、実際のガールをもっとはっきりと述べてください。私たちはx-y-problemで作業しません! - _私はマウスボタンを押し下げたままマウスを下にドラッグします...もちろん、私はそれを動かしている間はマウスのボタンを押していません。これは私には矛盾しているようです! – TaW
遅かれ早かれ、誰もがPictureBoxがGraphics.DrawImage()のかなり厄介な代替品であることを発見します。それはまだマウスヒットテストには少し役立つかもしれませんが、それが途中で始まると、本当にダンプする時間です。 –
入手したソースコードのデモに基づいて、正常に動作します。現在それを勉強しています。 – Phil