0

我在 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。谢谢你的帮助。

4

5 回答 5

2

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

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

于 2013-09-23T11:23:07.770 回答
0

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

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

        public Form1() {
            InitializeComponent();
        }

        // Rest of your code...
于 2013-09-23T11:22:06.203 回答
0

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

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

然后访问:

MessageBox.Show(Program.john[0]);
于 2013-09-23T11:23:03.567 回答
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 可以提供帮助:Access Modifiers (C# Reference)您可能还想查看有关最佳实践的这个 SO 答案。

于 2013-09-23T11:30:01.197 回答
0

制作你的数组public static

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

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

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

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

于 2013-09-23T11:33:11.283 回答