如何在C#中从另一个表单更新一个表单上的标签?
我想从Form2
更新Form1
标签。 所以这就是我所拥有的:
// Form1 public string Label1 { get { return this.label1.Text; } set { this.label1.Text = value; } } // Form2 private void button1_Click(object sender, EventArgs e) { Form1 frm1 = new Form1(); frm1.Label1 = this.textBox1.Text; this.Close(); }
所以上面的代码不起作用。 但是,当我添加以下内容时:
frm1.Show();
后
this.Close();
在Form2代码中,Form1显然是再次打开(两个窗口)。 但是我希望它在同一个窗口中更新所以我建议this.Close()
是不必要的。
有人有主意吗?
在button1_Click
方法中,您实际上是在创建Form1
的新实例并设置该新实例的Label1
属性。 这就解释了为什么在添加frm1.Show();
时屏幕上会显示Form1
的第二个实例frm1.Show();
。 如果仔细查看第二个副本,您会看到它的标签显示正确的值,但该表单的原始副本保留其原始值。
相反,我假设您要做的是为已经显示在屏幕上的Form1
的现有实例设置Label1
属性。 为了做到这一点,您将不得不获得对现有表单对象的引用。
因此,这成为一个简单的问题“如何在两个对象(表单)之间传递数据”,这在Stack Overflow上已被无数次询问过。 查看这些相关问题的答案:
- 在C#中的两个窗体之间进行通信
- 在两个窗体之间传递值
- C#beginner help,如何将子项中的值传递回父表单?
- 在c#winforms应用程序中将值从一个表单发送到另一个表单
尝试使用单例设计模式,因为我认为问题出在你使用new时
public class Form1Singleton { private static final Form1Singleton INSTANCE = null; // Private constructor prevents instantiation from other classes private Form1Singleton () { } public static Form1Singleton getInstance() { if(INSTANCE ==null) INSTANCE =new Form1Singleton(); return INSTANCE; } }
现在您只需1个表单即可轻松使用表单
private void button1_Click(object sender, EventArgs e) { Form1Singleton frm1 = Form1Singleton.getInstance(); frm1.Label1 = this.textBox1.Text; this.Close(); }
我希望能解决你的问题
BR,
Mohammed Thabet Zaky
最有可能的:你实际做的是在Form2
的范围内创建一个全新的Form1
实例,稍后在程序的控制流程中创建并显示另一个Form1
实例。 当然,在这种情况下,您不能指望您的标签设置正确。
最好的方法是将Form1
和Form2
相互分离,而只是传递程序控制流程中的数据。
当你说this.close时,表示你为该实例设置的所有值都会无效。
您可以在此处使用委托来设置表单值。
MVP模式适用于此类型的senario,也可以分离UI和业务逻辑。
这个线程是很好的参考: Windows窗体的UI设计模式(如WPF的MVVM)
- 如何在multithreading应用程序中安全地填充数据和Refresh()DataGridView?
- WPF MultiBinding失败。 为什么?
- 任何人都可以给我看一个MethodImplOptions.ForwardRef的例子
- 如何同步对ASP.NET中使用的List 的访问?
- Json.Net可以嵌入到可执行文件中吗?
- 找不到RedirectToLocal
- 如果String是引用类型,为什么类型String的Type.IsByRef返回false?
- NewGuid vs System.Guid.NewGuid()。ToString(“D”);
- 我应该喜欢IEnumerable 还是Arrays?