将数据从一种形式传递到另一种形式的问题

Posted

技术标签:

【中文标题】将数据从一种形式传递到另一种形式的问题【英文标题】:Issue passing the data from one form to another 【发布时间】:2017-06-07 11:45:54 【问题描述】:

概述

将数据从一种形式传递到另一种形式。

这是一个 WinForm 应用程序,它有两个表单,名为 form1PostCodeForm。我需要通过clickEvent 将短期表单PostcodeForm 中的数据传递回Form1,然后关闭表单。这些值存储在PostcodeSearch 类中的dataTable 中,要访问它们我:

    循环遍历PostCodeForm中的dataTable

    for (var item = 0; item < retreiveResults.Count; item++)
    
        var num = dataGridView2.Rows.Add();
        dataGridView2.Rows[num].Cells[0].Value = retreiveResults[item].City;
        dataGridView2.Rows[num].Cells[1].Value = retreiveResults[item].District;
        dataGridView2.Rows[num].Cells[2].Value = retreiveResults[item].HouseName;
    

    PostCodeForm 中创建了Form1 的实例:

    Form1 formIndi = new Form1();
    

    然后在PostCodeForm中创建了一些在循环结束之前初始化的局部变量

    var _City_Cell = dataGridView2.Rows[num].Cells[0].Value;
    var _District_Cell = dataGridView2.Rows[num].Cells[1].Value;
    var _HouseName_Cell = dataGridView2.Rows[num].Cells[2].Value;
    

    然后将它们传递给Form1(在PostCodeForm):

    formIndi.txt_City.Text = _StreetName_Cell.ToString();
    formIndi.txt_HouseName.Text = _HouseName_Cell.ToString();
    formIndi.txt_ District.Text = _District_Cell.ToString();
    

我需要将数据传回主窗体并将其存储在相关的文本框中。

问题

我的问题是我的文本框都没有使用给定的值进行更新,但是当我在 postCodeForm 中调试变量时,我可以看到这些值,所以我不知道为什么文本框没有显示值,因为我一直以这种方式将数据从表单传递到表单。

【问题讨论】:

试试 Form1 form1 = (this);因为您正在编辑另一个实例化表单,而不是渲染的表单,我猜 请为每个代码 sn-ps 指定一个类名。此外,您可能想澄清您的命名:PostCodeForm 是什么,它与PostcodeSearch 有何不同? formIndi 是什么? @defaultlocale 抱歉只是一个格式错误,现在已更正。 PostcodeSearch PostcodeForm 而 formIndi 只是 Form1 的一个实例 @whatdoyouNeedFromMe,所以就像我说的那样,在两个变量中链接,当你通过代码实例化一个表单时,你没有渲染它,所以标签变空了,因为渲染的表单没有绑定数据 @whatdoyouNeedFromMe 好多了,谢谢 :) 现在,问题本身。您的意思是您使用调试工具验证了这一行formIndi.txt_City.Text = _StreetName_Cell.ToString(); 上的_StreetName_Cell.ToString() 具有您需要的值。如果这是正确的,那么我们必须假设在这一行之后有东西覆盖了txt_City.Text 【参考方案1】:

正如@Ferus7 指出的那样,您正在创建Form1 的新实例,而不是更新主表单中的值。

//new instance with new text boxes and values
Form1 formIndi = new Form1();
//updates the control in the new form, doesn't affect the caller.
formIndi.txt_City.Text = _StreetName_Cell.ToString();

如果您想从PostcodeForm 检索值,有多种方法可以做到这一点。一种选择是在PostcodeForm 中声明属性/方法并通过它们检索值:

//declaration in PostcodeForm
class PostcodeForm 
//...
public string StreetName get; private set;

//after data retrieval
StreetName = _StreetName_Cell.ToString();


//call PostcodeForm from Form1
postcodeForm = new PostcodeForm();
postcodeForm.ShowDialog();
//after that, get the value
txt_City.Text = postcodeForm.StreetName;

另一种方法是将Form1的引用传递给PostcodeForm

class PostcodeForm 
//declare field
private final Form1 parent;
//create a constructor that accepts `Form1`
PostcodeForm(Form1 parent) 

    this.parent = parent;
    //... (InitializeComponents, etc.)


//update parent as necessary
parent.txt_City.Text = postcodeForm.StreetName;


//Sample call from Form1
postcodeForm = new PostcodeForm(this);
postcodeForm.ShowDialog();    

【讨论】:

【参考方案2】:

渲染新的实例表单

Form1 PostCodeForm= new Form1();
PostCodeForm.Show();
Application.Run();

【讨论】:

感谢您的回答,但如果我将其实现到我的表单 PostCodeForm 中,我仍然对此感到困惑,因为它仍然会创建一个新的 form1 实例

以上是关于将数据从一种形式传递到另一种形式的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中将数据从一种形式传递到另一种形式?

MSoft Access - 将变量从一种形式传递到另一种形式

如何将图像从一种形式传递到另一种形式?

从一种形式获取价值并将其传递给另一种形式

因为我可以从 jquery 将数据从一种形式发送到另一种形式?

如何使用dto和C#窗口形式将信息从一种形式传输到另一种形式?