[英]How can i calculate the distance from the top of pictureBox1 and almost the top of form1?
[英]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.