我遇到一个问题,我无法从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
变量吗?如何使这项工作?
答案 0 :(得分:3)
basicPerson.Name
与basicPerson.name
不同。
C#区分大小写。
basicPerson.Name
是Control.Name
property(Form
类来自Control
类)。而Control.Name
确实会返回一个表单名称。
阅读basicPerson.name
。虽然您最好更改属性名称以避免将来出现误解。
一旦切换到name
(或更好的属性名称),您就会发现需要将accessibility level属性更改为public
或{{1能够阅读它。
答案 1 :(得分:1)
name属性声明为private
,这意味着其他类无法访问它。您应该将其更改为public
或internal
(可由同一项目中的其他类访问)。
除此之外,您尝试访问Name
而不是name
,而C#区分大小写。
答案 2 :(得分:1)
好的,你有几个问题,但没有什么复杂的:
C#中有一些范围关键字处理属性和字段(变量)从类外部可见。这些是例如public
或private
。使用不同范围的优点是面向对象编程的一个重要方面。 - MSDN Variable and Method Scopes
您已声明了名为name
的媒体资源。它的范围是private
,因此您不能够从Form2
类之外调用它。如果您想访问name
的值,则应将其更改为public
。如果您想确保可以读取name
'值,但不能从外部代码更改,请将set-accessor
更改为私有。
public string PersonName { get; private set; }
就像你看到的那样,我改变了你的财产的名字。这有两个主要原因:
在C#中,属性名称应按代码约定大写。 - C# naming convention
Name
已经是Form2
课程的属性。这可能令人不安。 - MSDN Form class
最后但并非最不重要的是,您的代码中存在一些错误。
ListViewItem item = new ListViewItem(basicPerson.Name); // <-- "Name" should be "name"
/*---------------------------------------------------------*/
ListViewItem item = new ListViewItem(basicPerson.PersonName); // If you want to use my approach...