如何在其他表单上设置字典值
本文关键字:设置 字典 表单 其他 | 更新日期: 2023-09-27 17:57:58
我是C#初学者,遇到了如下问题,但我不确定是什么原因导致的,也不知道如何解决。有经验的程序员,请提供帮助。
我在Form1中有一个Dictionary
,但我想从Form2设置它的值。然而,在赋值之后,MessageBox
结果仍然显示为0;
Form1:msgbox显示结果=0
public Form1()
{
InitializeComponent();
bidcoords["TEST"] = 0;
}
public Dictionary<string, int> bidcoords = new Dictionary<string, int>();
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show(bidcoords["TEST"].Value.ToString());
}
表格2:
Form1 form1 = new Form1();
private void button2_Click(object sender, EventArgs e)
{
form1.bidcoords["TEST"] = 30;
}
Form1 form1 = new Form1();
您正在创建Form1的全新对象。相反,您需要将form1的现有实例传递给from2。但我建议您只传递dictionary对象,而不是表单
public class Form2 : Form
{
public Dictionary<string, int> Bidcoords {get; set;}
private void button2_Click(object sender, EventArgs e)
{
if(Bidcoords != null && Bidcoords.ContainsKey("TEST"))
Bidcoords["TEST"] = 30;
}
}
public class Form1: Form
{
public void ShowForm2()
{
Form2 form = new Form2{Bidcoords = bidcoords ;}
form.ShowDialog();
MessageBox.Show(bidcoords["TEST"].Value.ToString());
}
}
在程序中的某个时刻,您正在创建Form2
并显示它。此时,您正处于Form1
中。Form1
,也就是你在屏幕上看到的那个,就是你试图更新的表单。如果您尝试使用new
创建另一个Form1
,那么您将只拥有两个Form1
实例,这不是您想要的。
您需要在Form1
和Form2
之间通信Form1
的实例。
有两种常见的方法:
- 将名为
MainForm
的属性添加到Form2
。创建Form2
后,设置form2.MainForm = this;
- 向
Form2
添加一个以Form
为参数的构造函数,并将其保存
在任何一种情况下,当您处于Form2
时,都可以使用该变量来设置字典。
如果您只需要一个公共dictionay,则应将其声明为单例
public class DictionarySingleton
{
public static readonly Dictionary<string, int> Instance = new Dictionary<string, int>();
}
因此,您可以从两个表单访问它,甚至可以让同一类的多个表单实例更改同一字典,就像前面的文章中所说的那样,您正在创建Form1的另一个实例,从而创建字典的另一实例。
从任何地方访问您的词典:
DictionarySingleton.Instance["foo"]=0;