如何从另一种形式获取信息?

时间:2016-11-02 13:25:40

标签: c# winforms

我遇到一个问题,我无法从C#中的第二个表单获取信息。

我做了一个简单的程序,为ListView添加了一些名字。不知何故,我无法从第二种形式获得名称。

表格2:

// this is second form
private String name { get; set; }
private void button1_Click(object sender, EventArgs e)
{
    name = textBox1.Text;

    this.Close();
}

表格1:

// and first form on button click AddPerson()
Form2 basicPerson = new Form2();
basicPerson.ShowDialog();

ListViewItem item = new ListViewItem(basicPerson.Name);
listView1.Items.Add(item);

使用此代码,我得到的结果是ListViewItem与" Form2"名称。 .Close();以某种方式杀死Name变量吗?如何使这项工作?

3 个答案:

答案 0 :(得分:3)

basicPerson.NamebasicPerson.name不同。

C#区分大小写。

basicPerson.NameControl.Name propertyForm类来自Control类)。而Control.Name确实会返回一个表单名称。

阅读basicPerson.name。虽然您最好更改属性名称以避免将来出现误解。

一旦切换到name(或更好的属性名称),您就会发现需要将accessibility level属性更改为public或{{1能够阅读它。

答案 1 :(得分:1)

name属性声明为private,这意味着其他类无法访问它。您应该将其更改为publicinternal(可由同一项目中的其他类访问)。

除此之外,您尝试访问Name而不是name,而C#区分大小写。

答案 2 :(得分:1)

好的,你有几个问题,但没有什么复杂的:

可变范围

C#中有一些范围关键字处理属性和字段(变量)从类外部可见。这些是例如publicprivate。使用不同范围的优点是面向对象编程的一个重要方面。 - MSDN Variable and Method Scopes

关于您的代码

您已声明了名为name的媒体资源。它的范围是private,因此您能够从Form2类之外调用它。如果您想访问name的值,则应将其更改为public。如果您想确保可以读取name'值,但不能从外部代码更改,请将set-accessor更改为私有。

public string PersonName { get; private set; }

就像你看到的那样,我改变了你的财产的名字。这有两个主要原因:

  1. 在C#中,属性名称应按代码约定大写。 - C# naming convention

  2. Name已经是Form2课程的属性。这可能令人不安。 - MSDN Form class

  3. 最后但并非最不重要的是,您的代码中存在一些错误。

    ListViewItem item = new ListViewItem(basicPerson.Name); // <-- "Name" should be "name"
    /*---------------------------------------------------------*/
    ListViewItem item = new ListViewItem(basicPerson.PersonName); // If you want to use my approach...