GMap.NET和多边形名称未从第二种形式传递

时间:2016-12-16 18:47:38

标签: c# winforms gmap.net

所以基本上我试图制作一个名字从Form2输入的多边形,名为Apgabala_nosaukums(用我的语言表示,对不起)。我一直在尝试调试这个,前2次从Form2输入的名称确实被读取,我能够看到该名称被添加到Polygon。但现在它不再进入fromVisibleChanged,结果是多边形没有得到名字。这意味着我无法将bool变为true,因此我可以添加4个点并从中创建一个正方形或矩形区域。有任何想法吗?基本上btnAdd_Click函数不能正常工作,休息工作正常。有什么想法吗?

Form1(主要表格):

namespace GMapTest
{
    public partial class Form1 : Form
    {
        GMapOverlay polygons = new GMapOverlay("polygons");
        List<PointLatLng> points = new List<PointLatLng>();
        double lat;
        double lng;
        int clicks = 0;
        bool add = false;
        string nosaukums;
        public Form1()
        {
            InitializeComponent();
        }

        private void gMapControl1_Load(object sender, EventArgs e)
        {
            gmap.MapProvider = GoogleMapProvider.Instance;
            GMaps.Instance.Mode = AccessMode.ServerOnly;
            gmap.SetPositionByKeywords("Riga, Latvia");
            gmap.ShowCenter = false;
            gmap.Overlays.Add(polygons);  
        }

        private void gmap_MouseDown(object sender, MouseEventArgs e)
        {
            if (add == true)
            {
                if (e.Button == MouseButtons.Left)
                {
                    lat = gmap.FromLocalToLatLng(e.X, e.Y).Lat;
                    lng = gmap.FromLocalToLatLng(e.X, e.Y).Lng;
                    clicks += 1;
                    points.Add(new PointLatLng(lat, lng));
                }
                if (clicks == 4)
                {
                    GMapPolygon polygon = new GMapPolygon(points, nosaukums);
                    polygons.Polygons.Add(polygon);

                    clicks = 0;
                    points.Clear();
                    add = false;
                }
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            Apgabala_nosaukums addName = new Apgabala_nosaukums();
            addName.ShowDialog();
            addName.VisibleChanged += formVisibleChanged;
            if (nosaukums != null)
            {
                this.add = true;
            }

        }

        private void formVisibleChanged(object sender, EventArgs e)
        {
            Apgabala_nosaukums frm = (Apgabala_nosaukums)sender;
            if (!frm.Visible)
            {
                this.nosaukums = (frm.ReturnText);
                frm.Dispose();
            }
        }
    }
}

Form2(Apgabala_nosaukums):

namespace GMapTest
{
    public partial class Apgabala_nosaukums : Form
    {
        public string ReturnText { get; set; }

        public Apgabala_nosaukums()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.ReturnText = this.txtName.Text;
            this.Visible = false;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题出在您的btnAdd_Click功能中。当您致电ShowDialog时,系统会显示您的其他表单,并且在您关闭新表单之前,系统不会调用addName.VisibleChanged += formVisibleChanged;ShowDialog以模式方式显示表单,在关闭新表单之前,您无法与父级进行交互。

有几种方法可以解决这个问题。

1)在显示表单之前订阅VisibleChanged事件,

addName.VisibleChanged += formVisibleChanged;
addName.ShowDialog();

2)拨打addName.Show()而不是addName.ShowDialog()。这以非模态方式显示表单。该事件将被订阅,因为在新表单关闭之前在btnAdd_Click中继续执行。但是,父表单可以互动,不确定是否需要。

3)你也可以摆脱VisibleChanged事件的东西而不是ShowDialog并在之后阅读该属性。这是我看到代码时推荐的内容。

private void btnAdd_Click(object sender, EventArgs e)
{
    Apgabala_nosaukums addName = new Apgabala_nosaukums();
    addName.ShowDialog();
    this.nosaukums = addName.ReturnText;
    addName.Dispose();
}