我有两节课。和form1上的pictureBox1。 在第一堂课我正在使用pictureBox1:
在课堂上:
public System.Windows.Forms.PictureBox pb1;
然后在类构造函数中:
InitializeTest(pb1);
在InitializeTest里面我正在使用pb1。
在Form1中:
DopplerRadar dr = new DopplerRadar();
dr.pb1 = pictureBox1;
dr.Init();
现在我有另一个班级:
class GeneratePoints
{
private Bitmap backImage;
public Color backImagecolor;
public Bitmap imageWithPoints;
public int numberOfPoints;
public bool randomPoints;
public bool randomColors;
private List<Point> points = new List<Point>();
private Random r = new Random();
private void Init()
{
backImage = new Bitmap(pb1.Width, pb1.Height);
而且在这个类中我想在form1中使用pictureBox1。 我可以在这个类中声明pb1:
public System.Windows.Forms.PictureBox pb1;
问题是,是否有更好的方法可以做到这一点? 如果我想在另一个项目中使用这两个类?
答案 0 :(得分:0)
两种方法
您可以将对PictureBox的引用传递给将要使用它的函数或方法。然后该功能可以进行绘图。
例如,如果您的Generatepoints
类需要能够将其绘制到PictureBox上,请定义一个如下所示的方法:
class GeneratePoints
{
...
public void Draw(PictureBox pictureBox)
{
using (Graphics g = Graphics.FromHwnd(pictureBox.Handle))
{
foreach (var p in points)
{
//Draw the point
}
}
}
}
这种方法不太直观,但更常见。
为PictureBox的Paint事件创建一个事件处理程序。在处理程序中,出去抓取GeneratePoints
类的当前实例并使用其数据绘制点。
这种方法的优点是只有在需要绘制图片框时才会运行;如果图片框包含在隐藏的表单上(例如,通过其上方的另一个窗口),它将无法运行。