C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 126 を表示中)
■74857 / )  スクロールバーの描画が消えずに残る
□投稿者/ pod (29回)-(2015/02/03(Tue) 10:16:50)

分類:[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で試しました。
何か解決策はないでしょうか?よろしくお願いします。

返信 編集キー/


管理者用

- Child Tree -