【问题标题】:Storing value before passing to another form later在稍后传递到另一个表单之前存储值
【发布时间】:2012-11-28 05:43:18
【问题描述】:

我目前正在开发一个 C# Visual Studio Windows 应用程序。我在从一个表单(Form1)中获取文本框值并将其存储在一个变量中以供下一个表单(Form2)使用时遇到问题。我不想立即显示该值,因此我需要一种可以将值存储在后台并能够在以后使用它的方法。我该怎么做?

我试过这种方法,但它不起作用,谁能告诉我为什么? form2中的返回值为空。

Login.cs(登录页面)

    public string uname;

    private void LoginButton_Click(object sender, EventArgs e)
    {
        string userName = this.LoginUsernameTextBox.Text;
        uname = userName;
    }

Form2.cs

    private void CheckLoginUsername_Click(object sender, EventArgs e)
    {
    Login login = new Login();
    MessageBox.Show("The value of uname is:" + login.uname);
    }

【问题讨论】:

  • 你能用你试过的代码展示一些代码吗?
  • But when i tried it, the value seems to get lost along the way after not immediately passing it the the next form -- 那你做的不对。您可以轻松地将值存储在私有成员中,并随时在控件中显示它。
  • 在第二个表单中创建一个属性,并在显示第二个表单之前从第一个表单写入值。

标签: c# winforms variables store


【解决方案1】:

问题是Form2 没有引用用户正在与之交互的Login 的同一个实例,您正在创建一个新实例(从不向用户显示它)然后从中获取一个值那个。

您还没有展示这些表单之间的交互程度(如果您展示了,那么您错过了很多)。

它应该看起来像这样:

在 Form2 中:

private void Form1_Load(object sender, EventArgs e)
{
    Login loginForm = new Login ();

    loginForm.ShowDialog();

    string username = loginForm.UserName;
}

那么登录表单应该是这样的:

public string UserName { get; private set; }

这将允许您在内部设置值(当提交/关闭表单时)并在外部读取它。

公开字段被认为是不好的做法;最好改用属性(这样,除其他外,您可以执行我在此处所做的操作并将 setter 限制为私有)。

【讨论】:

  • 还有更多例子吗?因为我无法获得 Servy 的代码来工作
  • @Derek “它不起作用”是非常无用的。发生了什么和没有发生什么?另外,这两种形式之间的当前交互是什么(如果有的话)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多