我知道这里有很多帖子解释了如何使用Property方法在表单之间传递字符串,但我无法使其工作。我有Form1和Form2,在Form1中,我打开一个Bitmap,我想将路径传递给Form2,所以我可以稍后访问这个Bitmap。如果我在Form1中更改属性值,它没问题,但是当我加载Form2并尝试访问此信息时,它为null。我不知道自己做错了什么,如果有人可以看一看并发现我的错误,我真的会感到沮丧。
这是我的代码
Form1中
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
String teste;
public String filePath // this is my property
{
get
{
return teste;
}
set
{
teste = value;
}
}
private void OpenMap_Click(object sender, EventArgs e) // opens the bitmap
{
try
{
OpenFileDialog open = new OpenFileDialog();
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap bit = new Bitmap(open.FileName);
pictureBox2.Image = bit;
pictureBox2.BorderStyle = BorderStyle.Fixed3D;
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
this.filePath = open.FileName; // update my property
}
}
catch (Exception)
{ throw new ApplicationException("Falied loading image"); }
}
private void Next1_Click(object sender, EventArgs e) // opens form2
{
Form2 inicio = new Form2();
inicio.Show();
this.Hide();
}
private void SSc1_1_Load(object sender, EventArgs e)
{
}
}
}
表格2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Form1 obj = new Form1();
MessageBox.Show(obj.filePath);
}
}
问题是MessageBox始终为null ..
提前致谢 欢呼声
答案 0 :(得分:0)
为什么要创建Form1的第二个实例?您需要引用现有的Form1而不是新的Form1。通过Application.OpenForms(或类似的东西)获取现有表单,或者全局存储对表单对象的引用。您正在访问的Form1从未向用户显示,因此只有设计时间值。
答案 1 :(得分:0)
如果要使用属性发送信息,表单2需要引用表单1的实例才能访问它。
现在,您正在从表单2创建表单1的新实例,但由于该实例与您在参数中存储值的实例不同,因此该表单的参数没有该值。
您可以将表单1的引用传递给表单2的构造函数:
Form2 inicio = new Form2(this);
在构造函数中,您将存储该引用以供稍后使用:'
private Form1 _form1;
public Form2(Form1 form1)
{
_form1 = form1;
InitializeComponent();
}
当您需要属性中的值时,可以使用该引用:
MessageBox.Show(_form1.filePath);
使用属性并将表单引用传递给构造函数的替代方法,您可以将值本身传递给构造函数。但是,如果需要在表单之间传递更多信息,则对表单的引用允许您添加更多属性。