Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从另一个类更改标签?c#windows窗体visual studio_C#_Forms_Class_Methods_Label - Fatal编程技术网

如何从另一个类更改标签?c#windows窗体visual studio

如何从另一个类更改标签?c#windows窗体visual studio,c#,forms,class,methods,label,C#,Forms,Class,Methods,Label,我知道有很多帖子都在谈论这个,相信我,我已经看过了所有的帖子,但是我觉得我有点慢,不知道怎么做,所以事情就是这样! 我有一张表格 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button4_Click(object sender, EventArgs e) { adi mYadi= n

我知道有很多帖子都在谈论这个,相信我,我已经看过了所有的帖子,但是我觉得我有点慢,不知道怎么做,所以事情就是这样! 我有一张表格

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
设置为public static,但visual studio不喜欢这样,每当我在表单中使用新控件时,VS将public static更改为just public


希望你能帮助我

以这种方式更改标签不是一个好主意,并且违反了一些编程范例。通常,底层业务逻辑类不应该直接操作UI

该表单包含adi的一个实例。因此,除了将表单实例(即,
this
)传递给
adi
构造函数(或paso方法)之外,您还有点沉沦

最好使用adi在需要
Form1
更改其显示时可以触发的某种事件


只需将标签的修改器属性更改为“内部”或“公共”,然后调用表单并直接更改标签文本即可

i、 e

Form2 frm=new Form2();//表单2包含label8和调用表单1的方法(即buttonclick)
如果(List.Count>0)
{
frm.Label8.Text=“有人爱我:)”;
}
其他的
{
frm.Label8.Text=“没有人爱我:(”;
}

我知道这是两年前的事了,但你就不能这么做吗

public static void function(label l)
  {
    l.Text = "Changed text"
  }
然后在表格里做

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

我也在寻找答案,但我最终发现了如何从另一个类更改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:";
WindowsFormsApplication999.Form1.label8.Text = "your text here."; //This should modify label8.Text.
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”部分外,还有一些“this.”文本

您应该从另一个类调用它,如下所示:

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

你需要把一个Frim1的实例传递给你的代码< Adi<<代码>类的实例。它对你来说也不会有更好的接受%。我不知道接受率是多少……接受你之前的一些问题的答案:你应该考虑在将来的问题中把你的代码翻译成英语。但是它会创建一个新的F。orm并在此新表单中更改Label8的值,对吗?因为我以前尝试过(创建form1的新实例并更改Label8的值),但它没有任何作用否。在单独表单中调用时,只调用初始化的表单(准备使用它)如果将其属性设置为internal/protected internal或public..但如果其修饰符设置为private,则会从头开始初始化一个新表单..如果您的表单(要更改它,它是控件的某些属性)已在屏幕上显示您需要使其无效以查看更改..所有基于事件的设置都使用此方法..调用窗体的新实例并设置属性和显示/验证此方法不适用于我:(但我刚刚发现我刚刚发现了一个小代码,它可以做到这一点:
Label lb=(Label)Application.OpenForms[“Form1”]。Controls.Find(“label8”,false)。FirstOrDefault();lb.Text=“Form2”;)
您对此有何看法?使用它是一个好主意吗?是的。这对已经显示的表单很好。但是如果您需要考虑哪怕是很小的性能提升,您也可以这样过滤:Application.OpenForms[“Form2”].Controls.OfType().First(x=>x.Name==“Label8”);如果您使用firstordefault()而查询无法得到肯定的结果,它将抛出一个您无法控制的异常,应用程序将停止..但通过此操作,您可以控制异常,例如if(lb.Name==null){MessageBox.Show(“没有您搜索的名为的控件”);}仅仅因为语言允许你做一些事情,并不意味着这是一个很好的解决方案。这是一个非常黑客的方式来做他想做的事情。