【问题标题】:How does the following code actually work? [duplicate]以下代码实际上是如何工作的? [复制]
【发布时间】:2020-08-14 15:21:10
【问题描述】:

我目前正在开发一个相当简单的 Windows 窗体,它可以让我在文本字段中输入诸如 namenumber 之类的信息,然后将其添加到列表视图中。该信息是在另一个表单中输入的,我在弄清楚如何从 Form2 访问 Form1 中的listView 时遇到了一些问题。

我发现以下代码可以正常工作

表格1:

private void button1_Click(object sender, System.EventArgs e)
{
     Form2._Form1 = this;
     Form2 form2 = new Form2();
     form2.Show();
}

表格2:

    public static Form1 _Form1;

现在,我只想知道两件事。这实际上是做什么的?我必须使用静态吗? 抱歉,如果这是一个非常模糊的问题,只是想知道我实际上在做什么。

【问题讨论】:

  • 请学习阅读 C# 语言文档。您的问题确实过于宽泛,但从根本上讲,您似乎在问 static 字段是什么。有关static 成员和特定领域的广泛概述,请参阅副本。您发布的代码只是将Form2 中的static 字段设置为当前Form1 实例。大概是这样Form2 可以访问Form1 实例的成员。坦率地说,这是一种可怕的做法……Form2 根本不可能直接引用 Form1,如果确实需要它,则应该在构造函数中传递它。
  • 另请参阅stackoverflow.com/questions/1665533/…,以获取有关如何处理对象间交互的更好建议,使用 Winforms Form 对象作为主要示例(该建议普遍适用,但该问题专门针对 @987654335 @对象)。

标签: c# forms winforms


【解决方案1】:

这实际上是做什么的?

它将静态字段(由Form2所有 个实例共享)设置为form1 实例。然后创建一个Form2 实例并显示它。

我必须使用静态吗?

不 - 如果Form2所有 个实例应该共享对相同Form1. 的相同引用,则您只会使用静态

由于这很可能没有必要,我认为实例字段和构造函数参数(以确保该字段已设置)更合适:

private Form1 _Form1;
public Form2(Form1 form1)
{
   this._Form1 = form1;
}

然后在您的点击事件处理程序中:

private void button1_Click(object sender, System.EventArgs e)
{
     Form2 form2 = new Form2(this);
     form2.Show();
}

我也鼓励更多描述性的表单/字段名称:)

【讨论】:

  • 我在这里创建一个类变量吗?当我创建一个 int 或 string 时,我可以很容易地判断它是什么类型的变量。但是当你输入一个类的名称而不是 int、string、bool 等时,它是什么类型的变量?
  • 它是对该类型(或 null)实例的引用。这与您的代码之间的唯一区别是您的“变量”(准确地说是一个 field)是静态的 - 我的不是。
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 2019-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2012-06-07
  • 2012-08-02
相关资源
最近更新 更多