none
Массив элементов label, button и т. д. RRS feed

  • Вопрос

  • Нужен код похожий на данный: label[1].Text = "X"

    Например следующий код меня не устраивает:

    foreach (Control c in Controls)
                {
                    if (c is Label)
                    {
    
                    }
                }
    В этом коде после проверки каждого элемента больше нельзя к нему возвратиться, например если label5.Text = "X", тогда нужно чтобы label1 изменила текст на "X", вот так label1.Text = "X".
    23 марта 2012 г. 16:25

Ответы

  • Или может так:

    Control[] labels = Controls.Cast<Control>().Where(c => c is Label).ToArray();
          for (int i = 0; i < labels.Length; i++)
          {
            if (labels[i].Text == "X")
              labels[i - 1].Text = "X";
          }

    • Помечено в качестве ответа Doctor Gordon 24 марта 2012 г. 10:40
    23 марта 2012 г. 19:40
    Модератор

Все ответы

  • Может немножко переформулируете вопрос ? Общая идея вашего вопроса не очень понятна и идеи с переборами контролов тоже выглядят мягко говоря не очень оптимально.
    23 марта 2012 г. 17:13
    Модератор
  • Может немножко переформулируете вопрос ? Общая идея вашего вопроса не очень понятна и идеи с переборами контролов тоже выглядят мягко говоря не очень оптимально.
    foreach (Control c in Controls)
                {
                    if (c is Label)
                    {
                        if (c.Text == "X")
                            c[Tabindex - 1].text = "X" // этот код не срабатывает
                    }
                }

    Нужно изменить текст элемента label проверенного до данного элемента label.

    Я пытаюсь создать игру икс-нолики, тоесть я проверю две элемента label стоящих до него и если они равны "X" тогда пусть вводиться сообщение.

    23 марта 2012 г. 17:28
  • Вот может такой код сработает:

    var temp;
    foreach (Control c in Controls)
                {
                    if (c is Label)
                    {
                        if (c.Text == "X")
                            temp.text = "X"
                    }
                    temp = c;
                }
    Но мой Вам совет, лучше инкапсулировать логику работы в отдельный класс, а не привязывать его к интерфейсу. Вот посмотрите пример, может поможет.


    23 марта 2012 г. 18:13
    Модератор
  • Вот может такой код сработает:

    var temp;
    foreach (Control c in Controls)
                {
                    if (c is Label)
                    {
                        if (c.Text == "X")
                            temp.text = "X"
                    }
                    temp = c;
                }
    Но мой Вам совет, лучше инкапсулировать логику работы в отдельный класс, а не привязывать его к интерфейсу. Вот посмотрите пример, может поможет.


    Я не совсем понял вашу программу или это не то что нужно, вы точно поняли что я хочу?
    23 марта 2012 г. 18:54
  • Вы хотите иметь ссылку  на предыдущий объект?
    23 марта 2012 г. 19:07
    Модератор
  • Вы хотите иметь ссылку  на предыдущий объект?

    Предыдущий, следующий и чтобы получить доступ элементу относительно другого,

    тоесть для того чтобы получит доступ элементу label8 относительно label9 нужно написать чтото вроде этого label(9-1), но этот код не работает, а если бы сработало я бы смог немного проблем решить.

    23 марта 2012 г. 19:40
  • Или может так:

    Control[] labels = Controls.Cast<Control>().Where(c => c is Label).ToArray();
          for (int i = 0; i < labels.Length; i++)
          {
            if (labels[i].Text == "X")
              labels[i - 1].Text = "X";
          }

    • Помечено в качестве ответа Doctor Gordon 24 марта 2012 г. 10:40
    23 марта 2012 г. 19:40
    Модератор
  • Как вам уже посоветовал Agol36 в предыдущей теме - лучше разделять модель и представление, так вам  проще будет работать в дальнейшем и вы не будите зависеть от элементов управления.

    Например, чуть позже вы решите что X должен выглядеть красиво и захотите использовать для его отображение какое-либо изображение. Возможностей label для этого не хватит и все код вам придется переписывать почти с нуля.


    Для связи [mail]

    26 марта 2012 г. 9:35
  • Как вам уже посоветовал Agol36 в предыдущей теме - лучше разделять модель и представление, так вам  проще будет работать в дальнейшем и вы не будите зависеть от элементов управления.

    Например, чуть позже вы решите что X должен выглядеть красиво и захотите использовать для его отображение какое-либо изображение. Возможностей label для этого не хватит и все код вам придется переписывать почти с нуля.


    Для связи [mail]

    Я не знаю как это делается( но наверное узнаю по ходу.
    26 марта 2012 г. 10:05