如何通过按下一种形式的按钮创建对象并将其传递给另一种形式?
How make so that by pressing the button in one form created object and passed to the other?
我使用 GMap.NET 控件在 C# 上创建了一个使用地图的简单应用程序。所以,我的问题是:我想用另一种形式制作多边形、多段线和标记。我的相关代码是:
第一种形式(MapModule):
GMapOverlay polygonOverlay = new GMapOverlay("polygons");
GMapOverlay markersOverlay = new GMapOverlay("markers");
GMapOverlay polylineOverlay = new GMapOverlay("polylines");
第二种形式(新文件):
public MapModule _MapModule;
public Newfile(MapModule MapModule)
{
InitializeComponent();
_MapModule = MapModule;
}
private void addpolygon_Click(object sender, EventArgs e)
{
GMapPolygon polygon = new GMapPolygon(points, "What you need");
_MapModule.polylineOverlay.Polygons.Add(polygon);
}
输出为:
'GoogleMaps.MapModule.polylineOverlay' is inaccessible due to its
protection level
我想,它一定很简单,但我对编程完全陌生。
.
第一个又快又脏选项是使那个对象public:
public GMapOverlay polylineOverlay = new GMapOverlay("polylines");
但这不是一个好的做法,因为这样你就打破了封装原则,并且你失去了对你的对象发生的事情的控制。如果那个变量在某个时候有垃圾,你就很难知道为什么会这样。
另一种方法是创建一个 getter,这样即使未修改引用,也可以 public 访问引用。
private GMapOverlay polylineOverlay = new GMapOverlay("polylines");
public GMapOverlay PolylineOverlay
{
get
{
return this.polylineOverlay;
}
}
包含 class 的可以同时访问两者,但其他 class 只能访问 public 属性.
此外,如果您不希望在首次使用此对象之前创建它,您可以改为这样做:
private GMapOverlay polylineOverlay;
public GMapOverlay PolylineOverlay
{
get
{
if (this.polylineOverlay == null)
this.polylineOverlay = new GMapOverlay("polylines")
return this.polylineOverlay;
}
}
尽管在这种情况下,您应该在 class 中使用 public 属性,或者在其他地方实例化它。
我使用 GMap.NET 控件在 C# 上创建了一个使用地图的简单应用程序。所以,我的问题是:我想用另一种形式制作多边形、多段线和标记。我的相关代码是:
第一种形式(MapModule):
GMapOverlay polygonOverlay = new GMapOverlay("polygons");
GMapOverlay markersOverlay = new GMapOverlay("markers");
GMapOverlay polylineOverlay = new GMapOverlay("polylines");
第二种形式(新文件):
public MapModule _MapModule;
public Newfile(MapModule MapModule)
{
InitializeComponent();
_MapModule = MapModule;
}
private void addpolygon_Click(object sender, EventArgs e)
{
GMapPolygon polygon = new GMapPolygon(points, "What you need");
_MapModule.polylineOverlay.Polygons.Add(polygon);
}
输出为:
'GoogleMaps.MapModule.polylineOverlay' is inaccessible due to its protection level
我想,它一定很简单,但我对编程完全陌生。
第一个又快又脏选项是使那个对象public:
public GMapOverlay polylineOverlay = new GMapOverlay("polylines");
但这不是一个好的做法,因为这样你就打破了封装原则,并且你失去了对你的对象发生的事情的控制。如果那个变量在某个时候有垃圾,你就很难知道为什么会这样。
另一种方法是创建一个 getter,这样即使未修改引用,也可以 public 访问引用。
private GMapOverlay polylineOverlay = new GMapOverlay("polylines");
public GMapOverlay PolylineOverlay
{
get
{
return this.polylineOverlay;
}
}
包含 class 的可以同时访问两者,但其他 class 只能访问 public 属性.
此外,如果您不希望在首次使用此对象之前创建它,您可以改为这样做:
private GMapOverlay polylineOverlay;
public GMapOverlay PolylineOverlay
{
get
{
if (this.polylineOverlay == null)
this.polylineOverlay = new GMapOverlay("polylines")
return this.polylineOverlay;
}
}
尽管在这种情况下,您应该在 class 中使用 public 属性,或者在其他地方实例化它。