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