Как я могу использовать кусок кода для редактирования нескольких коробок с картинками - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь написать кусок кода, чтобы установить изображение из 92 коробок с картинками, которые у меня есть в форме. Я не хочу писать один и тот же кусок кода 92 раза, поэтому мне было интересно, можно ли это сделать быстрее. Мой код:

public void drawRoute()
{
    if (route1.line_00_R == null)
    {
        this.tabMap.Controls.Remove(this.line_00_R);
    }
    else if (route1.line_00_R == "Blue")
    {
        this.tabMap.Controls.Add(this.line_00_R);
        this.line_00_R.Image = global::MijnenvegerController.Properties.Resources.Blue;
    }
    else if (route1.line_00_R == "Red")
    {
        this.tabMap.Controls.Add(this.line_00_R);
        this.line_00_R.Image = global::MijnenvegerController.Properties.Resources.Red;
    }
}

Надеюсь, что-то подобное возможно:

public void drawRoute()
{
    for (//all values of {0})
    {
        if (route1.{0} == null)
        {
            this.tabMap.Controls.Remove(this.{0});
        }
        else
        {
            {1} = route1.{0}; // string that is the same as the name of the resource
            this.tabMap.Controls.Add(this.{0});
            this.{0}.Image = global::MijnenvegerController.Properties.Resources.{1};
        }
    }
} 

где {0} и {1} - какие-то заполнители или переменные.

Надеюсь, кто-нибудь может мне помочь. Я только начал с C # на этой неделе, поэтому я надеюсь, что это не глупый вопрос. Заранее спасибо за помощь!

EDIT

Я нашел что-то, что, как мне кажется, я могу использовать, но я не знаю, как это реализовать:

public Control[] Find( string key, bool searchAllChildren )

Метод Control.ControlCollection.Find (http://msdn.microsoft.com)

Я понимаю, что могу сделать это сейчас. Но я уже сделал все разные PictureBox, используя Disigner. Я «решил» очень грязным способом, используя этот код:

` public void drawRoute () { drawRoad (route1.line_00_R, this.line_00_R); drawRoad (route1.line_00_U, this.line_00_U); drawRoad (route1.line_01_D, this.line_01_D); drawRoad (route1.line_01_R, this.line_01_R);

// и т. Д. 92 раза!

        drawRoad(route1.line_6, this.line_6);
        drawRoad(route1.line_7, this.line_7);
        drawRoad(route1.line_8, this.line_8);
        drawRoad(route1.line_9, this.line_9);
        drawRoad(route1.line_10, this.line_10);
        drawRoad(route1.line_11, this.line_11);
        drawRoad(route1.line_12, this.line_12);
    }

    public void drawRoad(string color, PictureBox control)
    {
        if (color == null)
        {
            this.tabMap.Controls.Remove(control);
        }
        else if (color.Equals("Blue"))
        {
            this.tabMap.Controls.Add(control);
            control.Image = global::MijnenvegerController.Properties.Resources.Blue;
        }
        else if (color.Equals("DarkRed"))
        {
            this.tabMap.Controls.Add(control);
            control.Image = global::MijnenvegerController.Properties.Resources.DarkRed;
        }
        else if (color.Equals("Indigo"))
        {
            this.tabMap.Controls.Add(control);
            control.Image = global::MijnenvegerController.Properties.Resources.Indigo;
        }
        else if (color.Equals("GreyBlue"))
        {
            this.tabMap.Controls.Add(control);
            control.Image = global::MijnenvegerController.Properties.Resources.GreyBlue;
        }
        else if (color.Equals("Gold"))
        {
            this.tabMap.Controls.Add(control);
            control.Image = global::MijnenvegerController.Properties.Resources.Gold;
        }
        else if (color.Equals("Orange"))
        {
            this.tabMap.Controls.Add(control);
            control.Image = global::MijnenvegerController.Properties.Resources.Orange;
        }
    }

`

1 Ответ

0 голосов
/ 30 марта 2011

Чтобы решить эту проблему, добавьте графические блоки в двухмерный массив, чтобы вы могли использовать вложенный цикл для циклического перемещения по элементам управления / карте:

private PictureBox[,] _cell = new PictureBox[9,10];

В форме загрузки вы можете добавить все PictureBox в массив. Таким образом, вы можете получить к ним доступ так:

for(int row = 0; row < 10; row++)
{
    for(int column=0; column < 9; column++)
    {
        // drawing logic for _cell[column, row]
    }
}

Это имеет смысл? Вам нужна дополнительная помощь?

...