1

コードの一部を再利用したいので、そのコードを含むメソッドを使用してクラスを作成し、必要な場所でメソッドを呼び出すことにしました。

私の問題が何であるかの簡単な例を作りました:

Form1.cs

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

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

        public void Form1_Load(object sender, EventArgs e)
        {
            LoadText.getText();
        }
    }
}

LoadText.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication1
{
    public class LoadText : Form1
    {
        public static void getText()
        {
            WindowsFormsApplication1.Form1.label1.Text = "New label1 text";
        }
    }
}

ご覧のとおり、ラベル付きのフォームが1つあり、他のメソッド(LoadTextのgetText)を使用してラベルのテキストを変更したいと思います。

これが私のエラーメッセージです:

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

設計中、 label1をプライベートからパブリックに変更しました。

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

1

This is a common problem for newcomers to OO programming.

If you want to use a method of an object, you need to create an instance of it (using new). UNLESS, the method doesn't require the object itself, in which case it can (and should) be declared static.

于 2012-11-21T23:56:41.147 に答える
1

問題は、それForm1がオブジェクトではなくクラスであるということです。label1クラスの静的メンバーではなく、のインスタンスのメンバーですForm1Form1したがって、(クラスの)オブジェクトインスタンスが必要であることを示すエラー。

次のことを試してください。

Form1.cs:

LoadText.getText(label1);

LoadText.cs:

public static void getText(Label lbl)
{
    lbl.Text = "New label1 text";
}

これで、オブジェクトを受け入れ、Labelそのテキストを「newlabel1text」に設定する静的メソッドができました。

static修飾子の詳細については、次のリンクを参照してください。

http://msdn.microsoft.com/en-us/library/98f28cdx.aspx

HTH

于 2012-11-21T23:55:22.283 に答える
0

フォームの要素にアクセスするには、フォームへの参照が必要です。

于 2012-11-21T23:55:06.650 に答える
0

私はまた機能する別の方法を試しました:

Form1.cs:

 // here a static method is created to assign text to the public Label
 public static void textReplaceWith(String s, Label label)
 {
     label.Text = s;
 }

LoadText.cs:

namespace WindowsFormsApplication1
{
    public class LoadText : Form1
    {
        //new label declared as a static var
        public static Label pLabel;

        //this method runs when your form opens
        public LoadTextForm() 
        {
            pLabel = Label1; //assign your private label to the static one
        }

        //Any time getText() is used, the label text updates no matter where it's used
        public static void getText()
        {
           Form1.textReplaceWith("New label1 text", pLabel); //Form1 method's used 
        }
    }
}

これにより、パブリックメソッドを使用して、ラベルのテキスト変数をほぼどこからでも変更できるようになります。お役に立てれば :)

于 2014-02-13T00:12:14.440 に答える