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