我正在尝试将数据从form1中的datagridview值拉到form2中的文本框。
表格1;
public string xxx;
public string GetX()
{
return xxx;
}
private void addADocumentToolStripMenuItem_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows != null)
{
xxx = dataGridView1.CurrentRow.Cells["Name"].Value.ToString();
AddDocumentForm adf = new AddDocumentForm();
adf.ShowDialog();
}
else
{
MessageBox.Show("Please choose a record.");
return;
}
}
在表单2中尝试将xxx值拉入文本框;
using (Form1 f= new Form1())
{
string result= f.GetX();
txtSavedDocumentID.Text = result;
}
答案 0 :(得分:1)
在Form2
中,您正在创建Form1
的新实例:
using (Form1 f= new Form1())
由于我无法看到您的整个代码,我可能错了 - 但我认为这很可能不是您想要的。
您真正想要的是在GetX()
的现有实例上致电Form1
。
现在您需要某种方式来了解Form1
上Form2
的正确实例。一个简单的可能性是,但只有当你总是只使用Form1
的一个实例时,才能在Form1
上公开一个静态属性,它将为它提供一个单例实例。外面的世界:
public class Form1
{
// ...
public static readonly Form1 Instance {get; private set};
public Form1()
{
Instance = this;
}
// ...
}
在Form2
中,您不是使用using语句创建新实例,而是按照以下方式访问它:
string result = Form1.Instance.GetX();
txtSavedDocumentID.Text = result;
现在请注意,如果您的应用程序可能会打开多个Form1实例,这将无法正常工作并产生不良副作用。在这种情况下,需要另一种方法。但我希望你现在知道可能出现的问题,你可以解决它。
修改:虽然这会解决您的问题,但我希望补充一点,这不是一个非常好的方法,让您的表格需要了解彼此。您应该在后台有一些模型类,您的表单可以在其中读取和写入数据,而无需直接相互交互。但进一步探讨这个问题将超出这个问题的范围。
答案 1 :(得分:0)
更改了Form2;
public Form2(string qs)
{
InitializeComponent();
textBox1.Text = qs;
}
在Form1中;
从组合框获取文本并将其传递给form2;
{
var xxxx = (cbxEmployeeName.GetItemText(cbxEmployeeName.SelectedItem));
Form2 f = new Form2(xxxx);
f.Show();
}