分類:[C#]
2015/02/03(Tue) 12:08:00 編集(投稿者)
VS 2013 C# でAutoScrollを有効にしたパネルを使ったプログラムを作っています。
パネル内のpictureBoxを自由に動かせるようにしているのですが、
pictureBoxをスクロールバーの出ないはずの位置に戻してもスクロールバーの残像が残ってしまいます。
そのスクロールバーはクリックできず再描画がうまく行っていないようです。
再現率は2回に一回ほどで、Update() や Invalidate() などでは効き目がないようです。
手順は次のとおりです。
1. ボタンでpictureBoxを移動させてスクロールバーを表示
2. 手動でスクロールバーを左端に戻す
3. サイドボタンを押して pictureBox を0, 0 に移動させる
public partial class Form1 : Form
{
PictureBox pictureBox1 = new PictureBox();
Panel panel1 = new Panel();
Button button1 = new Button();
bool toggleFlag = false;
public Form1()
{
//InitializeComponent();
pictureBox1.BackColor = Color.Red;
pictureBox1.Size = new Size(30, 30);
panel1.Size = new Size(300, 100);
panel1.AutoScroll = true;
panel1.Controls.Add(pictureBox1);
button1.Location = new Point(10, panel1.Bottom + 10);
button1.Click +=button1_Click;
this.Controls.Add(panel1);
this.Controls.Add(button1);
}
private void button1_Click(object sender, EventArgs e)
{
if (!toggleFlag)
{
pictureBox1.Left = 1000;
panel1.ScrollControlIntoView(pictureBox1);
toggleFlag = !toggleFlag;
}
else
{
pictureBox1.Left = 0;
toggleFlag = !toggleFlag;
panel1.Invalidate();
}
}
}
実際のプログラムではドラッグアンドドロップで移動させていますが症状は同じです。
OS は Windows7(64bit) .Net Framework は4.0と4.5で試しました。
何か解決策はないでしょうか?よろしくお願いします。