2

パネル内にピクチャボックスを持つ単純なツールを開発するために C# を使用しています。パネルにはプロパティ Autoscroll = true があります。そのピクチャーボックスの画像がパネルよりも大きい場合、パネルにはスクロールバーがあります

ピクチャボックスのペイントイベントで四角形を描くことができました。しかし、スクロールすると、この長方形が消えます。スクロールバーを移動した後に再描画する必要があることはわかっていますが、再度復元する方法がわかりません。

x、y、幅、高さ、ズームはグローバル変数であり、クリックしてツリーノードを使用すると、データが表示されます。

private void pictureBoxView_Paint(object sender, PaintEventArgs e)
        {
            if (choose == true)
            {
                Size newSize = new Size((int)(pictureBoxView.Image.Width * zoom),
                                       (int)(pictureBoxView.Image.Height * zoom));
                Graphics graphic = pictureBoxView.CreateGraphics();
                Pen pen = new Pen(Color.Red, 3);
                graphic.DrawRectangle(pen, x, y, width, height);
                pen.Dispose();
            }
        }


 private void treeViewTemplate_AfterSelect(object sender, TreeViewEventArgs e)
        {
            // refresh picturebox
            pictureBoxView.Refresh();

            // allow repaint
            choose = true;

            string[] value = treeViewTemplate.SelectedNode.Tag.ToString().Split(',');
            x = Int32.Parse(value[0]);
            y = Int32.Parse(value[1]);
            width = Int32.Parse(value[2]);
            height = Int32.Parse(value[3]);
            zoom = Double.Parse(value[4]);

            //MessageBox.Show("x = " + y + ", y = " + y + ", width = " + width + ", height = " + height + ", zoom = " + zoom);

            // This call draw a rectangle again when I choose a value from TreeNode's Tag

            pictureBoxView_Paint(this, null);
        }
4

3 に答える 3

1

また、pictureBoxView.Refresh()を使用することもできます

2つのローカル変数を定義し、ScrollEventArgs.NewValueを介してスクロールオフセットを保存します

スクロール時にペイントしたくない場合は、これを使用できます

private void panel1_Paint(object sender, PaintEventArgs e) { pictureBox1.Refresh();}

于 2013-02-20T09:03:16.853 に答える
0

一般Invalidateに、コントロールのサーフェスを再描画するには、メソッドを使用する必要があります。

pictureBoxView.Invalidate();

これは、 :PictureBox内にあるを再描画するサンプルです。Panel

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    var rectangle = new Rectangle(10, 10, 100, 100);
    e.Graphics.DrawRectangle(Pens.Red, rectangle);
}

private void panel1_Scroll(object sender, ScrollEventArgs e)
{
    pictureBox1.Invalidate();
}

パネルをスクロールすると、固定された赤い長方形が再描画されます。

于 2013-02-20T08:15:46.077 に答える