-1

次のコードがあります

namespace Spaceship_Invaders
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

        }

        public class spaceship
        {

            Form1 myform = new Form1();           

            public void mspaceship()
            {              
                myform.textBox1.Text = " working";               


            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            spaceship myspaceship = new spaceship();
            myspaceship.mspaceship();

        }


    }
}

ボタン textbox1 をクリックしても何も表示されません。ここで何が欠けているか教えてください。

4

3 に答える 3

3

表示しているフォーム インスタンスとは異なるフォーム インスタンスにテキストを設定しています。spaceshipクラスはここに新しいフォームを作成します。

Form1 myform = new Form1(); 

そしてそれを使い続けています。これは目に見える形ではないので、効果を見ることはできません。

Form1これを機能させるにはインスタンスを渡す必要があり、spaceshipおそらくこれをコンストラクターのパラメーターとして使用する必要があります。thisキーワードを使用して、インスタンス メソッドで現在のインスタンスへの参照を取得できます。実際の例は次のとおりです。

public class spaceship
{
    public spaceship(Form1 form)
    {
        myForm = form;
    }

    Form1 myform;

    public void mspaceship()
    {              
        myform.textBox1.Text = " working";               


    }
}

private void button4_Click(object sender, EventArgs e)
{
    spaceship myspaceship = new spaceship(this);
    myspaceship.mspaceship();

}
于 2013-03-29T12:08:19.840 に答える
1

を変数として渡し、Formそれを Spaceship クラスに格納する必要があります。

public class Spaceship
{ 
     Form1 _form;       
     public Spaceship(Form1 myform)
     {
        _form = myform;
     }   

     public void mspaceship()
     {              
          _form.textBox1.Text = " working";                
     }
}

次に、ボタンで現在のクラスを渡します。

Spaceship myspaceship = new Spaceship(this);
myspaceship.mspaceship();

個人的には、おそらくPropertiesを使用してこのようなことをするでしょう。

 public class Spaceship
 { 
      public String Name { get; set; }     
      public Spaceship(string name)
      {
         Name = name;
      }   
 }

ボタン内では、次を使用します。

Spaceship spaceship = Spaceship("Enterprise");
this.textBox1.Text = spaceship.Name;
于 2013-03-29T12:12:04.957 に答える
1

各クラスが独自の責任を持つように、デザインを少し変更することをお勧めします。

namespace Spaceship_Invaders
{
    public partial class Form1 : Form
    {
        private Spaceship _myspaceship;

        public Form1()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            _myspaceship = new spaceship();
            this.textBox1.Text = myspaceship.mspaceship();
        }
    }

    public class Spaceship
    {
        public string mspaceship()
        {              
            return " working";               
        }
    }
}
于 2013-03-29T12:22:06.147 に答える