如何从另一个类更改标签?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(“没有您搜索的名为的控件”);}仅仅因为语言允许你做一些事情,并不意味着这是一个很好的解决方案。这是一个非常黑客的方式来做他想做的事情。