0

これについて話しているスレッドがたくさんあることを知っていて、それらすべてを見たと信じていますが、私は少し遅く、これを行う方法を理解できないと思うので、ここにあります!私は1つのフォームを持っています

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

    }

    private void button4_Click(object sender, EventArgs e)
    {
        adi mYadi= new adi();
        adi.paso(); 
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    public void l8u(string l )
    {
       label8.Text = l; 
    }
}

メソッドはのl8uテキストを変更することになっているので、静的ではない(パブリックである)label8ため静的にすることはできません。私はこの他のクラスを持っていますlabel8

public class adi :instrucion
{
    private  int paso;
    private  int registroD;
    private  int registroO; 
    private  int valor;
    private  int vsin; 

    public adi()
    {
        paso = 1;
    }

    public  void setRD(int i){
        registroD = i; 
    }

    public  void setR0(int i)
    {
        registroO = i;
    }
    public void setV(int i)
    {
        valor = i;
    }

    public  int getRD()
    {
        return registroD ;
    }

    public  int getR0()
    {
        return registroO;
    }

    public int getVf()
    {
        return vsin;
    }

    public void paso(){
         //in this method I need change the value of label8
    }  
}

メソッドpasoは、の値を変更する方法ですがlabel8、私にはできません。私は多くの異なる方法を試しました。たとえば、次のようなことをします。

public void paso()
{
    Form1.l8u();
} 

しかし、それForm1はクラスの名前であり、l8uは静的メソッドではなく、静的メソッドでもないため、それは不可能です。またlabel8、パブリック静的として設定しようとしましたが、Visual Studioはそれを好みませんでした。また、フォームVSで新しいコントロールを使用するたびに、パブリック静的を変更します。ただ公開します。

あなたが私を助けてくれることを願っています!

4

4 に答える 4

2

そのようにラベルを変更することは良い考えではなく、いくつかのプログラミングパラダイムに違反します。一般に、基盤となるビジネスロジッククラスは、UIを直接操作することは想定されていません。

フォームにはadiのインスタンスが含まれています。したがって、フォームのインスタンス(つまりthis、)をadiコンストラクター(またはpasoメソッド)に渡すことを除けば、あなたはちょっと沈んでしまいます。

Form1表示を変更する必要があるときにadiが発生する可能性のあるある種のイベントを使用することをお勧めします。

http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

于 2012-05-27T01:10:04.930 に答える
1

私はこれが2年前であることを知っていますが、あなたはこれをすることができませんでした

public static void function(label l)
  {
    l.Text = "Changed text"
  }

そしてフォームで

private void timer_tick(object sender, EventArgs e)
{
    function(label);
}
于 2014-07-10T12:41:57.750 に答える
1

私も答えを探していますが、form1のラベルを別のクラスから変更する方法をついに見つけました。

通常、Form1.Designer.csは次のようになります。

            this.label6.AutoSize = true;
        this.label6.Location = new System.Drawing.Point(59, 174);
        this.label6.Name = "label6";
        this.label6.Size = new System.Drawing.Size(72, 13);
        this.label6.TabIndex = 16;
        this.label6.Text = "Output String:";

Form1.Designer.csは次のようになり、別のクラスで呼び出すことができます。

        label8 = new System.Windows.Forms.Label();

            label8.AutoSize = true;
        label8.Location = new System.Drawing.Point(219, 26);
        label8.Name = "label8";
        label8.Size = new System.Drawing.Size(35, 13);
        label8.TabIndex = 25;
        label8.Text = "label8";  

         // 
        // Form1
        // 
        this.Controls.Add(label8);

いくつかの「これ」。Form1.Designer.csのlabel8の「this.Controls.Add」の部分を除くテキスト

そして、あなたはこのような別のクラスからそれを呼び出す必要があります:

WindowsFormsApplication999.Form1.label8.Text = "your text here."; //This should modify label8.Text.

編集:

Form1.Designer.csでもこれを変更する必要があります

        private System.Windows.Forms.Label label8;

これに:

        public static System.Windows.Forms.Label label8;
于 2018-01-03T12:25:28.443 に答える
-2

ラベルの修飾子のプロパティを内部またはパブリックに変更してから、フォームを呼び出してラベルテキストを直接変更するだけです。

すなわち

Form2 frm = new Form2(); // Form 2 contains label8 and calling in a method (i.e.buttonclick) of form1

if (List<WhoLovesMe>.Count > 0)
{
   frm.Label8.Text = "Someone Loves Me :)";
}
else
{
   frm.Label8.Text = "Noone Loves Me :(";
}
于 2012-05-27T01:29:13.680 に答える