1

Vba コードを C# に変換しようとしています。私は本当に近づいていますが、なぜこのエラーが発生し続けるのか理解できます。エラー メソッド グループ 'NextFeature' を非デリゲート タイプ 'ESRI.ArcGIS.Carto.IFeatureSelection' に変換できません。メソッドを呼び出すつもりでしたか?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using ESRI.ArcGIS.ArcMapUI;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;


namespace ArcMapAddin1
{
    public partial class frmParcelReader : Form
    {
        public frmParcelReader()
        {
            InitializeComponent();
        }


        public void ReadData()
            {

                //IMxDocument pMxDoc =  default(IMxDocument);
                 IMxDocument pMxDoc = ArcMapAddin1.ArcMap.Document;
                //IMap pMap = default(IMap);
                IMap pMap = pMxDoc.FocusMap;
                //IFeatureSelection pFLayer = default(IFeatureSelection);
            IFeatureLayer pLayer = pMap.get_Layer(0) as IFeatureLayer;    

            IFeatureSelection pFLayer = pLayer as IFeatureSelection;

            string stopHere2 = "";

                for (int Count = 0; Count <= pMap.LayerCount - 1; Count++) {

                    //if (pMap.LayerCount == "sde.GIS.parcels_adacounty")
                    if (pLayer.Name == "sde.GIS.parcels_adacounty")
                    {
                        //pFLayer = pMap.get_Layer(0)

                       //string thisString = pFLayer.SelectionSet.IDs.ToString();


                        IFeatureCursor pFCursor = null;

                        //pFLayer.SelectionSet.Search(null, false, pFCursor);


                        //IFeature pFLayer = pLayer(IFeature);

                        pFLayer = pFCursor.NextFeature;

                        if (pFLayer.SelectionSet.Count != 0) {
                            //lblParcel.Text = pF.Value.Fields.FindField("PARCEL");
                            //lblPrimaryOwner.Text =    pF.Value(pF.Fields.FindField("PRIMOWNER"));
                            //lblMailingAddress.Text = pF.Value(pF.Fields.FindField("ADDCONCAT"));
                            //lblPropertyAddress.Text = pF.Value(pF.Fields.FindField("ADDRESS"));
                        } else {
                            //if (sender == "Button")
                               // MessageBox.Show("Please select a Parcel.");
                        }

                        break; // TODO: might not be correct. Was : Exit For
                    }
                }

            }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            ReadData();
        }
    }
}
4

4 に答える 4

8

NextFeature呼び出されたときに を返すメソッドです(こちらIFeatureのドキュメントを参照してください)。そのため、これを変更する必要があります。

pFLayer = pFCursor.NextFeature;

これに:

pFLayer = pFCursor.NextFeature();

関数が実際に呼び出されるようにします。コードの元の行は基本的に関数ポインタを取り、それを にキャストしようとしているIFunctionため、エラーが発生します。

于 2012-08-08T14:22:49.683 に答える
5

()の末尾に追加するだけでよいと思いますNextFeature

このような:

pFLayer = pFCursor.NextFeature();

もちろん、最初pFCursor以外のものに初期化する必要がありnullます。そうしないと、コードを実行したときにクラッシュします。

于 2012-08-08T14:22:13.870 に答える
3

NextFeature は、空の括弧で呼び出す必要があるメソッドです。

pFLayer = pFCursor.NextFeature();
于 2012-08-08T14:23:46.883 に答える
2

この部分は機能しません:

IFeatureCursor pFCursor = null;
pFLayer = pFCursor.NextFeature;   // pFCursor is sure to be null

しかし、それは実行時エラーになります。おそらく NextFeature はメソッド (関数) であり、次のものが必要になります。

IFeatureCursor pFCursor = ...     // something valid
pFLayer = pFCursor.NextFeature(); // always use () in a method call
于 2012-08-08T14:21:54.683 に答える