C# 从解决方案中的另一个文件访问windows窗体中的数组

C# 从解决方案中的另一个文件访问windows窗体中的数组,c#,arrays,winforms,button,namespaces,C#,Arrays,Winforms,Button,Namespaces,我在VS中制作了一个windows窗体应用程序.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"}; } 我希望我的按钮访问此阵列,以便它可

我在VS中制作了一个windows窗体应用程序.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。感谢您的帮助。

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

namespace WindowsFormsApplication7 {
    public partial class Form1 : Form {
        string[] john = { "tom", "susan" };

        public Form1() {
            InitializeComponent();
        }

        // Rest of your code...

您的数组在Form1类中超出范围。要在程序中对其进行纠正并将其公开,请执行以下操作:

public static string[] john = {"tom", "susan"};
然后通过以下方式访问:

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

变量的范围仅限于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]);
}

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

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

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

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

有关更多信息,MSDN可以提供帮助:此外,您可能希望了解有关最佳做法的信息。

使您的阵列
成为公共静态阵列

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

MessageBox.Show(Program.john[0]);
但是,这不是一个好的做法:
Form1
不应该引用
Program
的成员,因为它引入了循环依赖(
Program
->
Forms1
->
Program
)并破坏了封装


更好的解决方案是将此列表存储在
Form1

的公共属性中。我想消除我的错误-“名称“john”在当前上下文中不存在。”这不会编译。你必须创建program的对象才能访问它的非静态成员。好的,根据我的经验,我最了解这个。我不得不将数组移出Main并添加您的更改<代码>命名空间WindowsFormsApplication1{静态类程序{公共静态字符串[]john={“tom”,“susan”};[StatThread]静态void Main(){}