Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив элементов 
:(
    Опции темы
granit1986
Дата 19.11.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 17.6.2008

Репутация: нет
Всего: нет



Как сделать массив из одинаковых элементов на форме, скажем элементов Label, чтобы можно было обращаться к ним по индексу?
PM MAIL   Вверх
SpaceSpace
Дата 19.11.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



Очен просто. делаеш массив Label, и помещаеш туда ссылки Label'ов,
а потом обращаешся к ним по индексу.
в твоем вопросе уже есть ответ
Код

    List<Label> labelList = new List<Label>();
        public Form1()
        {
            InitializeComponent();
            labelList.Add(this.label1);
            labelList.Add(this.label2);
        }


Это сообщение отредактировал(а) SpaceSpace - 19.11.2008, 15:24


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Dmitry1
Дата 19.11.2008, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.11.2008

Репутация: нет
Всего: нет



а зачем вообще такое может понадобиться?
PM MAIL   Вверх
jorikdima
Дата 19.11.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

Репутация: нет
Всего: нет



панель как контейнер использовать.
PM MAIL   Вверх
SpaceSpace
Дата 19.11.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



а в панели разве нет своего внутреннего контейнера?


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
gambit
Дата 20.11.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Dmitry1, у тебя 50 textbox'ов на форме, тебе надо их все очистить, у тебя есть возможность

Код

textBox1.Text="";
textBox2.Text="";
textBox3.Text="";
textBox4.Text="";
...
textBox49.Text="";
textBox50.Text="";


а можно

Код

for(int i=0;i<50;i++)
{
textbox[i].Text="";
}


Пример корявый, но суть отражает.
PM MAIL ICQ Skype   Вверх
PashaPash
Дата 20.11.2008, 15:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



gambit, а можно один раз написать свой FindControls<T>(Control parent, Predicate<T> p) с yield внутри. И больше никогда не заморачиваться с массивами контролов.
Вот примерно так:
Код

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace SomeUselessUtils
{
    public static class ControlExtenders
    {
        public static IEnumerable<Control> FindControls<T>(this Control parent)
            where T : Control
        {
            return parent.FindControls<T>(null);
        }

        public static IEnumerable<Control> FindControls<T>(this Control parent, Predicate<T> condition) 
            where T : Control
        {
            foreach (Control child in parent.Controls)
            {
                T controlToCheck = child as T;
                if (controlToCheck != null && (condition == null || condition(controlToCheck)))
                {
                    yield return controlToCheck;
                }

                foreach (Control deepChild in child.FindControls<T>(condition))
                {
                    yield return deepChild;
                }
            }
        }
    }
}


Это сообщение отредактировал(а) PashaPash - 20.11.2008, 16:27


--------------------
PM MAIL WWW   Вверх
gambit
Дата 20.11.2008, 16:41 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



PashaPash, да я не спорю, можно и файл открывать в 50 строчек. К чему лишний геморой?? Данная проблема встречаеться не так часто чтобы думать над ней, писать 30 строчек кода. ИМХО излишняя сложность, которая никому не нужна.
PM MAIL ICQ Skype   Вверх
PashaPash
Дата 20.11.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



gambit, лишняя сложность - это вмето использования готовой коллекции контролов создавать еще одну. Пример с очисткой текстбоксов - это не только твой for в 3 строчки. Это еще и создание textbox[], ручное добавление в него и в Controls одновременно, и потом непонятная синхронизация двух коллекций, проблемы с утечками памяти. Как-то слишком у тебя гемморойно для очистки текстбоксов получается. IMHO пример не то чтобы "немножко кривоватый", он решает ту же проблему намного сложнее чем FindControls. И нифига не отвечает на вопрос "а зачем вообще такое может понадобиться".


--------------------
PM MAIL WWW   Вверх
granit1986
Дата 23.11.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 17.6.2008

Репутация: нет
Всего: нет



я вот помню в Visual Basic 6 при копировании элемента и вставки на ту же форму, предлагалось создать массив этих элементов и ничего не надо было писать в коде. можно было легко обращаться по индексу (:
PM MAIL   Вверх
granit1986
Дата 7.12.2008, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 17.6.2008

Репутация: нет
Всего: нет



мда... так никто ничего и не сказал нужного, а между тем всё оказалось до банального просто ((:

Код

Button[] newButton = new Button[16];
for (int i = 0; i < newButton.Length; i++)
            {
                newButton[i] = new Button();
                Controls.Add(newButton[i]);
            }


Это сообщение отредактировал(а) granit1986 - 7.12.2008, 19:25
PM MAIL   Вверх
EgoBrain
Дата 8.12.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: 1
Всего: 2



Да просто надо понимать что Button или еще какой-нить контрол - это класс, а класс - это тип данных, а над любым типом данных можно производить стандартные операции (создавать массив, перебирать и т.п.). Ну кончено смотря что понимать под стандартными операциями smile
PM MAIL ICQ Skype   Вверх
SpaceSpace
Дата 9.12.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



granit1986, 
внимательно читай что тебе говорят и правильно формулируй вопросы.



--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
L1729
Дата 12.12.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



SpaceSpace
помойму вопрос был задан вполне корректно, только вот вы решили с умничать в ответе, а теперь притензии к нему? не красиво так делать!
PM MAIL   Вверх
source777
Дата 12.12.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(granit1986 @  7.12.2008,  19:24 Найти цитируемый пост)
мда... так никто ничего и не сказал нужного, а между тем всё оказалось до банального просто ((:

PashaPash тебе всё что нужно по этому вопросу сказал и стандартное решение привёл и даже объяснил почему твоё "до банального просто" использовать не стоит... единственное только пример использования он не привёл.
Очистить все TextBox`ы внутри groupBox1 можно, например, такой строчкой:
Код

groupBox1.FindControls<TextBox>().ForEach(x => x.Text = "");

где ForEach, ставший уже стандартом де-факто для таких случаев, есть расширяющий метод (помести в статический класс в области видимости)
Код

        public static void ForEach<T>(this IEnumerable<T> list, Action<T> action)
        {
            foreach (var item in list) action(item);
        }


Прелесть этого способа даже не в том, что очистку текстбоксов можно провернуть с помощью одной строки, а в том, что этот способ сработает для любого набора контролов, а твой только для массива, который ты захардкодил...

Это сообщение отредактировал(а) source777 - 12.12.2008, 23:54


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.