如何改变从另一个类的标签? C#窗口形式的视觉工作室(How to change a label

2019-07-29 13:48发布

我知道有很多线程谈论这个的,相信我,我已经看到了所有的人,但我觉得我有点慢,无法弄清楚如何做到这一点所以这里是东西! 我有一种形式

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
    }  
}

该方法帕索是一个负责改变的价值label8但我不能做到这一点! 我试过例如许多不同的方式做这样的事情

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

但是,这是不可能的,因为Form1是类的只是名称和l8u是不是和静态方法,也尝试设置label8作为公共静态但视觉工作室不喜欢这一点,每当我用了一个新的控制形式VS改变市民静态只是公众。

希望你能帮我!

Answer 1:

只需将标签的修改prperty更改为内部或公共,然后打电话给你的形式,直接更改标签的文本..

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 :(";
}


Answer 2:

以这种方式改变标签不是一个好主意,违反了一些编程范式。 一般情况下,底层的业务逻辑类不应该直接操作UI。

该表单包含ADI的一个实例。 因此,短传形式的实例(即的this )的adi的构造函数(或到斗牛方法),你还挺沉没。

最好使用某种类型的事件时,它需要的是ADI可以开火Form1改变其显示。

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



Answer 3:

我知道这是2年前,但想不出你只是这样做

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

然后在表格做

private void timer_tick(object sender, EventArgs e)
{
    function(label);
}


Answer 4:

我也在寻找答案,但我终于找到了如何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);

有些“这一点。” 除了在“this.Controls.Add”的部分文字在的Label8 Form1.Designer.cs

你应该从这样的另一个类调用它:

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;


文章来源: How to change a label from another class? c# windows forms visual studio