4

重複
の可能性: 非静的フィールド、メソッド、またはプロパティ 'WindowsApplication1.Form1.setTextboxText(int) にはオブジェクト参照が必要です

Webに接続し、テキストボックスから値(IP)を入力して結果を受け取るIPトレーサーを作成しています。これがコードです。

 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 System.Xml;

    namespace geoIP
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

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

             public static string iptrace()
            {
                XmlDocument xmldoc = new XmlDocument();
                XmlNodeList xmlnode;
                int i;

                xmldoc.Load("http://freegeoip.net/xml/" + textBox1.Text);
                xmlnode = xmldoc.GetElementsByTagName("response");
                for (i = 0; i < xmlnode.Count; i++)
                {
                    xmlnode[i].ChildNodes.Item(0).InnerText.Trim();
                    label1.Text = "Ip Address: " + xmlnode[i].ChildNodes.Item(0).InnerText.Trim();
                    label2.Text = "Country Code: " + xmlnode[i].ChildNodes.Item(1).InnerText.Trim();
                    label3.Text = "Country Name: " + xmlnode[i].ChildNodes.Item(2).InnerText.Trim();
                    label4.Text = "Region Code: " + xmlnode[i].ChildNodes.Item(3).InnerText.Trim();
                    label5.Text = "Region Name: " + xmlnode[i].ChildNodes.Item(4).InnerText.Trim();
                    label6.Text = "City: " + xmlnode[i].ChildNodes.Item(5).InnerText.Trim();
                    label7.Text = "Zip Code: " + xmlnode[i].ChildNodes.Item(6).InnerText.Trim();
                    label8.Text = "Latitude: " + xmlnode[i].ChildNodes.Item(7).InnerText.Trim();
                    label9.Text = "Longitude: " + xmlnode[i].ChildNodes.Item(8).InnerText.Trim();
                    label10.Text = "Metro Code: " + xmlnode[i].ChildNodes.Item(9).InnerText.Trim();
                }

            }


 }
}`

それは私にエラーを与えます

非静的フィールド、メソッド、またはプロパティ「geoIP.Form1.textBox1」にはオブジェクト参照が必要です

4

3 に答える 3

4

textBox1コントロールはクラスのメンバーのように宣言されますが、static関数内で使用されます。それが問題です。

これを修正するには、メソッドnonを宣言する必要があります static

public string iptrace()
{
   ...
}
于 2012-07-04T20:43:33.983 に答える
0

メソッド宣言staticから削除します。iptrace()

textBox1静的メソッドから非静的(インスタンス)メンバーにアクセスしようとしています。

編集:

また、メソッド宣言をに変更しpublic void iptrace()ます。ステートメントがないのでreturn <some string value>;(そしてあなたの場合は何も必要ありません)、C#コンパイラは反対します。戻り型を持つことによりvoid、メソッドが値を返さないことを示しています。

編集2:

また、メソッドアクセスをに変更する必要がありますprivate void iptrace()。公開する必要はありません。

そして最後に、名前に関する.NETガイドラインを確認してください。たとえば、メソッドと名前空間はPascalCasedである必要があります。

于 2012-07-04T20:43:29.840 に答える
0

textBox1.Textに変更Form1.ActiveForm.textBox1.Text

于 2012-07-04T20:43:33.917 に答える