0

我知道有很多线程在谈论这个并且相信我我已经看到了所有这些,但我认为我有点慢并且无法弄清楚如何做到这一点所以这就是事情!我有一个表格

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

I know this is 2 years ago but couldnt you just do this

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

and then in the Form do

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

只需将标签的修饰符属性更改为内部或公共,然后调用您的表单并直接更改标签文本。

IE

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 回答