如何通过按下一种形式的按钮创建对象并将其传递给另一种形式?

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 属性,或者在其他地方实例化它。