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

时间:2013-09-23 11:14:49

标签: 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"};
}

我希望我的按钮可以访问此数组,因此它可以

MessageBox.Show(john[0]);

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

5 个答案:

答案 0 :(得分: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]);
}

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

答案 1 :(得分:0)

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

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

        public Form1() {
            InitializeComponent();
        }

        // Rest of your code...

答案 2 :(得分:0)

您的数组超出了Form1类的范围。要纠正在Program:

中声明它是公开的
public static string[] john = {"tom", "susan"};

然后访问:

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

答案 3 :(得分: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)您也可以查看有关最佳做法的this SO answer

答案 4 :(得分:0)

制作阵列public static

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

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

但是,这不应被视为一种良好做法:Form1不应引用Program的成员,因为它引入了循环依赖关系(Program - > {{1} } - > Forms1)并打破封装。

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

的公共属性中