C# 如何从WinForms中的初始化方法获取变量?

C# 如何从WinForms中的初始化方法获取变量?,c#,arrays,winforms,list,methods,C#,Arrays,Winforms,List,Methods,比标题更清楚地解释我的问题。下面是一个代码示例: public partial class TestForm : Form { public static List<PictureBox> listPictureBox; public TestForm() { InitializeComponent(); PictureBox[] pictureBoxArray = {pictureBox1, pictureBox2, pic

比标题更清楚地解释我的问题。下面是一个代码示例:

public partial class TestForm : Form
{
    public static List<PictureBox> listPictureBox;

    public TestForm()
    {
        InitializeComponent();
        PictureBox[] pictureBoxArray = {pictureBox1, pictureBox2, pictureBox3};
    }

    public static bool testMethod
    {
        listPictureBox = new List<PictureBox>();

        for(int i = 0; i < ?????; i++) //The questionmarks should be pictureBoxArray.Length, but I don't know how to reach the code.
        {
            listPictureBox.Add(?????[i]; //Same here, the questionmarks should be pictureBoxArray.
        }
    }
公共部分类TestForm:Form
{
公共静态列表图片盒;
公共测试表单()
{
初始化组件();
PictureBox[]pictureBoxArray={pictureBox1,pictureBox2,pictureBox3};
}
公共静态布尔测试方法
{
listPictureBox=新列表();
for(int i=0;i<??;i++)//问号应该是pictureBoxArray.Length,但我不知道如何找到代码。
{
listPictureBox.Add(????[i];//此处相同,问号应为pictureBoxArray。
}
}
我希望这能让问题更清楚。

试试这个:

public partial class TestForm : Form
{
     public List<PictureBox> listPictureBox;
     PictureBox[] pictureBoxArray = default(PictureBox[]);

     public TestForm()
     {
         InitializeComponent();
         pictureBoxArray = new PictureBox[] {pictureBox1, pictureBox2, pictureBox3};
     }

     public bool testMethod()
     {
           listPictureBox = new List<PictureBox>();

         for(int i = 0; i < pictureBoxArray.length; i++) 
         {
             listPictureBox.Add(pictureBoxArray[i]); 
         }

         return false;
     }
}
公共部分类TestForm:Form
{
公共列表图片盒;
PictureBox[]pictureBoxArray=默认值(PictureBox[]);
公共测试表单()
{
初始化组件();
pictureBoxArray=新PictureBox[]{pictureBox1,pictureBox2,pictureBox3};
}
公共bool测试方法()
{
listPictureBox=新列表();
对于(int i=0;i
问题在于
列表的静态关键字以及相应的
测试方法

静态变量或静态方法属于该类的每个实例。
因此,它们无法访问每个类的特定实例变量

作为第一次尝试,你应该把你的班级改为

public partial class TestForm : Form
{
    public static List<PictureBox> listPictureBox;

    // Make this instance variable public 
    public  PictureBox[] pictureBoxArray;

    public TestForm()
    {
        InitializeComponent();

        // prepare the array with the 3 local pictureboxes
        pictureBoxArray = new PictureBox[] {pictureBox1, pictureBox2, pictureBox3};
    }

    // Calling this method requires that you pass the form instance where the 3 pictureboxes 
    // have been created
    public static bool testMethod(TestForm instance)
    {
        listPictureBox = new List<PictureBox>();

        for(int i = 0; i < instance.pictureBoxArray.Length; i++) 
        {
            listPictureBox.Add(instance.pictureBoxArray[i]; 
        }
    }

}

然而,在这一点上,我问自己是否真的需要这段代码….

你不能从静态上下文访问实例变量。你到底想用listPictureBox实现什么?我希望能够使用列表在PictureBox上切换颜色。这应该由另一个类处理,并将发送到bool,其中我将执行此操作。好的。因此,您的问题几乎肯定是您的方法(和字段)上的“static”关键字。如果您想更改TestForm的特定实例的颜色,那么从静态上下文中尝试更改很可能是徒劳的。我建议您仔细阅读“static”的含义,以便确保您正确理解(),然后找出一种方法来获取对正在进行操作的对象的TestForm特定实例的引用。不,这不起作用。我收到错误消息“非静态字段、方法或属性需要对象引用”。这会导致错误:“当前上下文中不存在名称‘instance’。您是否在testMethod中添加了参数
TestForm instance
?为了更清楚地解释我想做的事情,我想使用bool方法更改列表中前四个索引的颜色,当第二次调用时,它将是索引4-8等。(在我的示例中,只有3个索引,但我的索引中有50个)。那么,这是另一个问题。您需要另一个变量来跟踪调用之间数组中的实际更改位置。现在,如果这个答案解决了您最初的问题,我建议您编写一个新问题,在其中解释第二个问题。添加TestForm实例(我没有这样做)会给我一个新错误。指向TestForm.testMethod(t)的“非静态字段、方法或属性需要对象引用”;
TestForm t = new TestForm();
TestForm.testMethod(t);