【问题标题】:passing variables form to form private to global in c#?在c#中将变量形式传递给全局?
【发布时间】:2014-05-10 18:59:14
【问题描述】:

一直在开发一个简单的 c# windows 应用程序。我已经能够将一些变量从一个表单传递到下一个表单,并使用form2 y = new form2(passingVariable); y.ShowDialog(); 使用它们,然后在下一个表单public form2(string myVariable) 上使用它们。然而,这种方法只允许我在这些花括号中使用变量。目前我正在尝试将它传递给下一个表单。但是,当我尝试使用上面提供的代码行将它传递到下一个表单时,它不会让我使用该变量。它给了我错误当前上下文中不存在名称'userName'我有很多源代码并且不知道我究竟需要什么来分享所以这里是我的webng.com帐户的link如果有人需要查看它,请使用我的源代码设置的非常简单的网页。

【问题讨论】:

  • 请使用 pastebin 或类似的东西将代码转储到异地。它以可读的方式格式化代码。还要确保在粘贴到 pastebin 时正确描述了您的代码。

标签: c# forms variables global private


【解决方案1】:

尝试在当前表单上创建另一个变量来存储该用户名,然后分配传递给该变量的用户名。你的构造函数将是这样的:

private string username;

public talkingWithProgram(string userName, string pcName)
{
InitializeComponent();
this.Text = pcName;
programQuestion.Text = "Whatcha wanna talk about \n" + userName + "?";
this.userName = userName;
}

sportsCategories y = new sportsCategories(userName);

创建一个新的 sportsCategories 类现在从这个上下文中传递 userName,它具有之前表单中的值。目前,您似乎在构造函数中引用了 userName ,它位于方法上下文中并且超出了范围之外。

【讨论】:

  • 非常感谢@Knightwisp :) 这解决了我遇到的错误消息。我一插入“私人字符串用户名”;和“this.userName = userName”,但是在将该信息插入我的程序后,出现一条新的错误消息,显示“sport_click”没有重载匹配委托“System.EventHandler”
  • 您的代码有一个 sports_Click() 方法。是同一个吗?也许这是一个错字。尝试使 userName 受保护甚至公开,以便命名空间中的其他类可以使用它。另外,声明“公共字符串用户名;”在正确的地方;那是在“DialogResult 结果;”之后。将其设为“sportsCategories y = new sportsCategories(this.userName);”
  • 说实话,代码有点难读,但试试上面的。
  • 我添加的代码完全像你让我做的那样。我通过将“object sender, EventArgs e”添加到打开“sportsCategories”表单的点击事件的参数来修复新错误。
  • 是的,这就是按钮的方法。有道理。
【解决方案2】:

我会避免在 Windows 窗体的构造函数中设置特定变量。一般来说,更习惯使用getters and setters,或者专门为此目的指定的函数。

例如:如果您可以拥有代码form2 y = new form2(passingVariable);,则您可以拥有该代码

form2 y = new form2();
form2.SetMyVar(passingVariable);

或者,如果您使用的是 getter 和 setter:

form2 y = new form2();
form2.SetMyVar = passingVariable

这样,每当您需要设置或更新变量时,只要您有对表单的引用即可。此外,在上述SetMyVar() 函数中(如果您选择该方法),请务必设置一个类变量。 在您的代码中,类变量位于您的函数之外,因此它们对该类实例的所有函数都是可见的。

【讨论】:

    【解决方案3】:

    初始化类 xyz 中的变量 在构造函数中为它们分配值,例如

     String a1,b1=String.empty
      Class xyz
     {
       xyz(string a,string b)
      {       //constructor
       a1=a;
       b1=b;
        //Now use them in whole class
      }
    
     }
    

    或者如果你想在整个应用程序中使用它们,那么在 Program.cs 中全局初始化它们 然后你可以设置和获取类似的值

    Program.a1="abc"    //assigning value
    

    【讨论】:

    • 字符串 a1 和 b1 必须在类定义中。此外,他可能应该公开构造函数。
    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多