简答的说有两个窗体 想要简单的在Form2中调用Form1的Axmapcontrol1的get_layer()
_方法 comboBox1.Items.Add(frm.axMapControl1.get_Layer(i).Name);
我自己的方式是在Form1中把axmapcontrol1的属性设置为public然后在Form2中定义一个Form变量来调用 为什么值始终传不过去 而非AO控件可以这样传值
Arcengine +C# 中窗体之间调用AO控件的问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-04 17:32关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是由于两种编程语言之间的不同导致的。C#和ArcGIS Engine API之间的交互存在一些差异。
首先,在C#中,你需要使用
System.Windows.Forms.Control类来创建你的控制,并且你需要将其添加到你的窗体上。例如:private AxMapControl axMapControl1; private void InitializeComponent() { this.axMapControl1 = new Ax.Map.AxMapControl(); this.axMapControl1.Location = new System.Drawing.Point(0, 0); this.axMapControl1.Name = "axMapControl1"; this.axMapControl1.Size = new System.Drawing.Size(568, 439); // 设置其他属性... this.Controls.Add(this.axMapControl1); }然后,在你的Form2中,你可以通过以下方式获取这个控件:
private void Form2_Load(object sender, EventArgs e) { axMapControl1.GetLayer(i).Name; // 这里将返回层的名字 }现在你可以在Form2中直接访问AxMapControl中的GetLayer方法了。
至于你在Form1中如何设置AxMapControl1的属性为public,这取决于你如何实现AxMapControl1的公共性。如果你没有这样做,那么它可能不会被公开。你可以通过以下方式在Form1中设置AxMapControl1为公共:
public class MainForm : System.Windows.Forms.Form { private AxMapControl axMapControl1; public MainForm() { InitializeComponent(); axMapControl1 = new Ax.Map.AxMapControl(); axMapControl1.Location = new System.Drawing.Point(0, 0); axMapControl1.Name = "axMapControl1"; axMapControl1.Size = new System.Drawing.Size(568, 439); // 设置其他属性... Controls.Add(axMapControl1); } }这样,当你在Form1中调用
axMapControl1时,它就会被视为公共的。解决 无用评论 打赏 举报