こんにちは、stackoverflow コミュニティです。すでに同様の質問を探してみましたが、ちらつきに関する質問しか見つかりませんでした。これは、私が抱えている問題とは異なります。
PictureBox
パネル上で es を移動するたびに es が末尾にならないようにするための助けが必要です。私が作成しているアプリケーションは、MS ペイントに似ています。をクリックするPictureBox
と、次を使用してクリックしてドラッグできます。
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
pictureBox1.Left += (e.X - x);
pictureBox1.Top += (e.Y - y);
}
}
クリックしなかった他のpictureBoxesは、次を使用してDoubleBufferedパネルにペイントされます。
private void panel1_Paint(object sender, PaintEventArgs e)
{
foreach (PictureBox pb in pboxes)
{
if (!pb.Visible)
{
e.Graphics.DrawImage(pb.BackgroundImage, new Rectangle(pb.Location, pb.Size));
}
}
}
何らかの理由PictureBox
で背景画像をドラッグすると、ペイントされたパネル全体にドラッグされます。
奇妙なことに、これは Paint イベントでのみ発生します。パネルの背景画像を何かにすると動きPictureBox
が鈍くなります。Image
パネルに s をペイントしているときにのみ発生します。
ここに例があります
助けていただければ幸いです、ありがとう。
分かりやすいようにコードを簡略化しました。 (トレーリング効果は引き続き発生します)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int x;
int y;
public Form1()
{
InitializeComponent();
pictureBox1.Show();
pictureBox2.Hide();
pictureBox3.Hide();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
panel1.Invalidate();
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
pictureBox1.Left += (e.X - x);
pictureBox1.Top += (e.Y - y);
}
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(pictureBox2.BackgroundImage, new Rectangle(pictureBox2.Location, pictureBox2.Size));
e.Graphics.DrawImage(pictureBox3.BackgroundImage, new Rectangle(pictureBox3.Location, pictureBox3.Size));
}
}}
そして、この doubleBuffered パネル クラスを使用します
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class DoubleBufferPanel : Panel
{
public DoubleBufferPanel()
{
// Set the value of the double-buffering style bits to true.
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
}
}
}
今、私のコードは 3PictureBox
と 1DoubleBuffered
パネルを呼び出します。
フォームが最大化され、Panel1.size = (2000, 1200);
それぞれの背景画像がランダムな大きな詳細画像にPictureBox
size = (700, 700)
設定されます。PictureBox
動くと引きずり効果が発生し、pictureBox1
毎回再現できます。