|
分類:[C#]
環境
Microsoft Visual Studio 2010
Windows 7
仕様
UserControl を作成します。
その上にパネルを配置し(AutoScroll = True, dock = full)
そのパネルにピクチャーボックスを張り付けます。(BorderStyle = Fixed3D)
コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Origin
{
public partial class SamplePictureBox : UserControl
{
public SamplePictureBox()
{
InitializeComponent();
}
private void SamplePictureBox_Paint(object sender, PaintEventArgs e)
{ // 全てのPaintイベントに描画をいれないと表示されない
SamplePaint();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{ // 全てのPaintイベントに描画をいれないと表示されない
SamplePaint();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{ // 全てのPaintイベントに描画をいれないと表示されない
SamplePaint();
}
private void SamplePaint()
{
Graphics g = pictureBox1.CreateGraphics();
//全体を黒で塗りつぶす
g.FillRectangle(Brushes.Black, g.VisibleClipBounds);
//黄色い扇形を描画する
g.DrawPie(Pens.Yellow, 60, 10, 80, 80, 30, 300);
pictureBox1.Update();
}
}
}
問題点
その1:ピクチャーボックスに描画させるには、上記のサンプルコードのように
ピクチャーボックスの親になるパネル、ユーザーコントロールのペイントイベントで
描画(SamplePaint)させる必要があるのでしょうか?と、いうよりできなかった。
もっとスマート(簡単な)方法がないのでしょうか?
その2:上記で作成したUserControlをフォームに貼りテストしてみた。
フォームを移動して、画面モニターの左外にPictureBoxの一部または全てをを出し、
もとに戻してくるとピクチャーボックスの左の一部が描画されていないことがある
描画されたままになる方法はあるのでしょうか?
ちなみにフォームに直接PictureBoxを張り付けて同様のことをしても
このようになりません。
最後に
すみません。よろしくお願いします。
|