繁体   English   中英

从多个类中调用Form1上的pictureBox1的最佳方法是什么?

[英]What is the best way to call pictureBox1 on Form1 from a number of classes?

我有两节课。 以及在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;

问题是是否有更好的方法? 如果我想在另一个项目中同时使用这两个类?

两种方法

您可以将对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类的当前实例,并使用其数据绘制点。

这种方法的优点是它仅在需要绘制图片框时才会运行。 如果图片框包含在隐藏的表单中(例如,其顶部的另一个窗口),则它将不会运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM