【问题标题】:C# Get field from Main FormC# 从主窗体获取字段
【发布时间】:2018-01-10 22:25:38
【问题描述】:

我有一个主窗体,我需要在其他类中从主窗体获取或设置字段。我在主窗体中创建了公共属性:

public partial class MainForm : Form
{
     public string get_txt()
     {
         return phone.Text;    //phone - textbox
     }
}

但在其他课程中我无法获得此属性:

MessageBox.Show(MainForm.get_txt); //there error. It doesn't seemed get_txt property.

对于这个最简单的问题,我很抱歉,但我真的不知道。 Everywhere 写了最简单的方法 - 在主窗体类中为主窗体中所需的私有字段创建公共属性。我哪里错了?

【问题讨论】:

  • MainForm 是类本身,而不是该类的实例。
  • @Equalsk 所说的加上您通过方法而不是属性公开的值。如果您保持原样,则需要使用formInstance.get_txt();
  • 但是如果它在程序开始时初始化,实例正在创建,是吗? Application.Run(新 MainForm());如何获取主窗体的实例?

标签: c# forms public


【解决方案1】:

谢谢大家。 但是当我创建一个新的主窗体时,其中的所有控件都会像我当前的主窗体一样初始化?

【讨论】:

  • 不,它们不会(除非您对控件中的值进行硬编码),正如我在其他答案下方的 cmets 中所写的那样。请使用评论按钮发表评论,不要发布属于 cmets 的答案
【解决方案2】:

你的MainForm 不是静态类,你不能这样使用。如果你想访问 MainForm(方法或变量),你必须分配变量。

MainForm mForm = new MainForm();
MessageBox.Show(mForm.getText());

【讨论】:

  • 这不会自动确保以phone.Text 写入的字符串将被显示。由于创建了一个新的MainForm
  • “您的 MainForm 不是静态类”这不是必需的,该类不必是静态的。只有以这种方式访问​​的属性。但这也行不通,因为它正在访问一个类变量phone
  • @MongZhu MainForm.get_txt 如果你想这样使用,你的类必须是静态的。
  • 不,类不必是静态的。方法或属性必须是静态的。
【解决方案3】:

创建MainForm 的实例,然后调用它。

Mainform _mainform=new Mainform();

MessageBox.Show(_mainform.Get_text);

【讨论】:

  • 这不会自动确保以phone.Text 写入的字符串将被显示。由于创建了一个新的MainForm
【解决方案4】:

所以MessageBox.Show(MainForm.get_txt) 无法编译,因为您试图引用静态属性,而不是实例方法。

我不是 winforms 开发者,所以这有点猜测:

在您的代码中的某处,您会收到类似var main = new MainForm() 的调用。在那个实例上,即main,您将能够调用main.get_txt()

附带说明一下,鉴于您使用 C# 工作,最好将该方法命名为更惯用的名称,也许是 public string GetPhoneNumber() 或更好,但将其设为属性:

public string PhoneNumber { get { return phone.Text; } }

【讨论】:

  • 这不会自动确保以phone.Text 写入的字符串将被显示。由于创建了一个新的MainForm
  • 因此引用“代码中的某处”,即使用您已有的实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2019-06-29
相关资源
最近更新 更多