2017-05-29 77 views
0

我有两种形式,form1(用户可以选择要编辑的文件)和form2(用户可以编辑数据)。以下为Form1的ListView码,其中用户选择要编辑的文件:表单之间传递数据为空

private void listView1_DoubleClick(object sender, EventArgs e) 
{ 
    _AccountData = File.ReadAllLines(listView1.SelectedItems[0].Tag.ToString()); 
    Form2 passForm = new Form2(); 
    passForm.ShowDialog(); 
} 

下面是第二种形式,其中,用户应该能够修改数据的代码:

private void Form2_Load(object sender, EventArgs e) 
{ 
    Form1 f1 = new Form1(); 
    string[] accData = f1.AccountData; 
    string[] test1 = accData.ToString().Split(';'); 
    oldUsername.Text = test1[0]; 
    oldPass.Text = test1[1]; 
    //and so on  
} 

物业来传递数据:

private string[] _AccountData; 
public string[] AccountData 
{ 
    get { return _AccountData; } 
    set { _AccountData = value; } 
} 

这是我用来传递形式之间的数据,但每当我试图显示的数据,它总是挂在第二个形式,因为它表明f1.AccountData is null,E尽管它里面有数据(如果我把一个断点显示在第一种形式的数据,但它不会传递给第二种)。

我相对较新的工作与几种形式,所以我不知道什么需要编辑的代码工作。为什么它显示第二种形式的值为空,当它显示第一种形式的值时?

+0

在Form2中创建构造函数或属性并传递或分配_Acco untData的值,然后显示表单。 –

+0

这已被问及一百万次之前,并且(大惊喜)答案是正确的。投票结束 – EpicKip

回答

2

继行创建的Form1一个全新的实例:

Form1 f1 = new Form1(); 

新实例都有一套新的控制和性能,这是不相关的,你打开Form2收到了Form1实例。

为使您的代码正常工作,您应该将现有的Form1实例的引用传递给Form2,而不是创建Form1的新实例。

或更好 - 只传递数据到Form2而不传递给其他表单。例如。使用Account类来保存帐户数据(而不是字符串的数组):

public class Account 
{ 
    public string UserName {get;set;} 
    public string Password {get;set;} 
    // etc 
} 

然后在Form2构造与值从帐户实例添加参数Account类型的,并且初始化表单控件:

public Form2(Account account) 
{ 
    InitializeComponent(); 
    oldUsername.Text = account.UserName; 
    oldPass.Text = account.Password;   
} 

而在创建时提供值Form2

private void listView1_DoubleClick(object sender, EventArgs e) 
{ 
    // better store `Account` instance in private fields 
    _AccountData = File.ReadAllLines(listView1.SelectedItems[0].Tag.ToString()); 
    Account account = new Account { 
     UserName = _AccountData[0], 
     Password = _AccountData[1] 
     // etc 
    }; 

    Form2 passForm = new Form2(account); 
    passForm.ShowDialog(); 
} 
+0

我如何从现有表单传递参考?以及如何直接传递数据?公开这些字段?尽管如此,我想避免这种情况。 – EInherjar

+0

@EInherjar:在Form2中创建一个允许外部调用者设置值的公共方法。然后让'Form1'调用该方法并设置值。我没有看到使用属性而不是方法的问题;除非你是例如试图坚持公司编码标准。 – Flater

+0

好的,谢谢你的冗长答复,但是我在公开课和公开课时遇到了一些小问题。这是否是最佳做法?我还会如何保护田地? – EInherjar