3

`静的メソッドでテキストボックスのテキストを変更したい. 静的メソッドで「this」キーワードを使用できないことを考えると、どうすればよいですか。つまり、テキスト ボックスのテキスト プロパティへのオブジェクト参照を作成するにはどうすればよいでしょうか。

これは私のコードです

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

    public delegate void myeventhandler(string newValue);


    public class EventExample
    {
        private string thevalue;

        public event myeventhandler valuechanged;

        public string val
        {
            set
            {
                this.thevalue = value;
                this.valuechanged(thevalue);

            }

        }

    }

        static void func(string[] args)
        {
            EventExample myevt = new EventExample();
            myevt.valuechanged += new myeventhandler(last);
            myevt.val = result;
        }

  public  delegate string buttonget(int x);



    public static buttonget intostring = factory;

    public static string factory(int x)
    {

        string inst = x.ToString();
        return inst;

    }

  public static  string result = intostring(1);

  static void last(string newvalue)
  {
     Form1.textBox1.Text = result; // here is the problem it says it needs an object reference
  }



    private void button1_Click(object sender, EventArgs e)
    {
        intostring(1);

    }`
4

2 に答える 2

3

非静的オブジェクトの属性を静的メソッド内から変更する場合は、次のいずれかの方法でそのオブジェクトへの参照を取得する必要があります。

  • オブジェクトは引数としてメソッドに渡されます-これは最も一般的です。オブジェクトはメソッドの引数であり、メソッドを呼び出したり、プロパティを設定したりします
  • オブジェクトは静的フィールドに設定されます-これはシングルスレッドプログラムでは問題ありませんが、同時実行性を処理する場合はエラーが発生しやすくなります
  • オブジェクトは静的参照を介して利用できます-これは2番目の方法の一般化です:オブジェクトはシングルトンである可能性があり、名前やその他のIDでオブジェクトを取得する静的レジストリを実行している可能性があります。

いずれの場合も、静的メソッドは、その非静的プロパティを調べたり、非静的メソッドを呼び出したりするために、オブジェクトへの参照を取得する必要があります。

于 2013-03-09T22:36:55.083 に答える
0

dasblinkenlight から完璧な回答が得られました。3 番目の方法の例を次に示します。

public static  string result = intostring(1);

static void last(string newvalue)
{
    Form1 form = (Form1)Application.OpenForms["Form1"];
    form.textBox1.Text = result;
}

文字列パラメーターを渡して使用していない理由は完全にはわかりません。

于 2013-03-09T22:46:21.750 に答える