【问题标题】:Access an array in windows form from another file in a solution从解决方案中的另一个文件访问 Windows 形式的数组
【发布时间】:2013-09-28 06:25:45
【问题描述】:

我在 VS 中制作了一个窗体应用程序 .sln。它有一个 Program.cs 和 Form1.cs。它建立。 Form1.cs中有一个按钮

private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hello");}

我在 Program.cs 中有一个数组

static void Main() {
string[] john = {"tom", "susan"};
}

我希望我的按钮能够访问这个数组,以便它可以

MessageBox.Show(john[0]);

我不了解所有的命名空间和完全限定的类等等。我只是无法将我的数组粘贴到 Form1.cs 中的任何地方而不会出现错误,它必须返回 Main。感谢您的帮助。

【问题讨论】:

  • 我想摆脱我的错误 - “名称 'john' 在当前上下文中不存在。”

标签: c# arrays winforms button namespaces


【解决方案1】:

制作你的数组public static

public static string[] john = {"tom", "susan"};

MessageBox.Show(Program.john[0]);

但是,这并不是一个好的做法:Form1 不应引用 Program 的成员,因为它引入了循环依赖 (Program -> Forms1 -> Program) 并中断封装。

更好的解决方案是将此列表存储在Form1 的公共属性中。

【讨论】:

    【解决方案2】:

    您应该将数组放在Form1 类中,以便您的表单控件使用它。根据经验,不要将属性放在 Program.cs 中,因为它们会“过于全局”,或者换句话说,将变量的范围限制在绝对最低限度,以使代码更清晰。

    public class Form1
    {
        string[] john = {"tom", "susan"};
    
        private void button1_Click(object sender, EventArgs e) 
        {
            MessageBox.Show(this.john[0]);
        }
    }
    

    有关更多信息,MSDN 可以提供帮助:Access Modifiers (C# Reference) 您也可以查看this SO answer,了解最佳实践。

    【讨论】:

      【解决方案3】:

      你的变量的范围仅限于 main 方法,如下所示

      static class Program
      {
         public static string[] john = { "tom", "susan" };
      
          [STAThread]
          static void Main()
          {
      

      然后

      private void button1_Click(object sender, EventArgs e)
      {
          MessageBox.Show(Program.john[0]);
      }
      

      您可以使用公共数组声明,但在这种情况下您需要创建类的实例。

      【讨论】:

        【解决方案4】:

        您的数组超出了 Form1 类的范围。纠正在程序中将其公开:

        public static string[] john = {"tom", "susan"};
        

        然后访问:

        MessageBox.Show(Program.john[0]);
        

        【讨论】:

        • 这不会编译。您必须创建 Progarm 的对象才能访问其非静态成员。
        • 好的,根据我的经验,我最了解这一点。我不得不将阵列移出 Main 并添加您的更改。 namespace WindowsFormsApplication1 {static class Program {public static string[] john = {"tom", "susan"}; [STAThread] static void Main() {}
        【解决方案5】:

        如果您在表单类中添加变量 john 的声明,它应该可以工作。

        namespace WindowsFormsApplication7 {
            public partial class Form1 : Form {
                string[] john = { "tom", "susan" };
        
                public Form1() {
                    InitializeComponent();
                }
        
                // Rest of your code...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 1970-01-01
          • 2016-09-17
          • 2021-07-09
          • 2020-11-18
          • 2012-03-31
          • 2019-08-13
          相关资源
          最近更新 更多