darkeyers 2015-11-08 02:32 采纳率: 0%
浏览 1748

Arcengine +C# 中窗体之间调用AO控件的问题

简答的说有两个窗体 想要简单的在Form2中调用Form1的Axmapcontrol1的get_layer()
_方法 comboBox1.Items.Add(frm.axMapControl1.get_Layer(i).Name);
我自己的方式是在Form1中把axmapcontrol1的属性设置为public然后在Form2中定义一个Form变量来调用 为什么值始终传不过去 而非AO控件可以这样传值

  • 写回答

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时,它就会被视为公共的。

    评论

报告相同问题?