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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> делегат и Listbox 
:(
    Опции темы
Darkmaster
Дата 6.6.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообщем есть три класса: Player(который содержита данные "игрока", имя, возраст), Team(содержащий ArrayList из объектов Player) и собственно Form1. 

Так вот, есть метод в классе team , он собственно выводит игроков в ListBox при помощи делегата указывающего на метод в классе Form1.  Значения переменных передаются , вроде все есть, но в ListBox ничего не добавляется. Долго рыл MSDN но так и не смог разобраться с данной проблемой:(

Метод в классе team:

Код

 public void DisplayPlayers() 
        {
            Form1 frm1 = new Form1();
            addTolistbox add = new addTolistbox(frm1.AddToList);
            foreach(Player pl in al)
            {
                add(pl.name, pl.age);
            }
        }
 

Метод в классе Form1:

Код

public void AddToList(string n, int a) 
        {
            listBox1.Items.Add(String.Format("Name: {0}, age {1}", n, a));
            
        }

--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Naum
Дата 6.6.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

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



Цитата(Darkmaster @  6.6.2007,  15:37 Найти цитируемый пост)
int a

Не уверен что из-за этого, но это тоже ошибка. В C# по идее вроде даже не должно компилиться.
Цитата(Darkmaster @  6.6.2007,  15:37 Найти цитируемый пост)
listBox1.Items.Add(String.Format("Name: {0}, age {1}", n, a));

Нужно же a.ToString()

Добавлено через 4 минуты и 14 секунд
А нет... Ошибочка вышла. Прошу прощения. Все нормуль.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 6.6.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Naum, нет, в данном случае подойдет любой класс. ToString вызовется автоматом.


Darkmaster, а зачем такой изврат с делегатами? Если попробовать напрямую вызвать этот метод, будет ли работать?
PM MAIL WWW ICQ   Вверх
Darkmaster
Дата 6.6.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если вызвать так то не будет, компилится, но Listbox пуст

Код

Form1 frm1 = new Form1();
            frm1.AddToList("Hey", 1);


Это сообщение отредактировал(а) Darkmaster - 6.6.2007, 15:35
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
ivashkanet
Дата 6.6.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Darkmaster, так, самый главный вопрос:
Метод DisplayPlayers() заполняет листбокс именно той формы из которой вызывается?
Если да, то учить матчасть и вызывать AddToList так:
Код

this.AddToList("Hey", 1);

PM MAIL WWW ICQ   Вверх
Darkmaster
Дата 6.6.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я понимаю что так можно, но здесь ситуация малость другая. Форма одна, но разные классы! Т.е. главный класс Form1, из него до listbox'a можно достучаться, а из класса Team напрямую нельзя. 

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

Это сообщение отредактировал(а) Darkmaster - 6.6.2007, 15:59
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Naum
Дата 6.6.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

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





--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Darkmaster
Дата 6.6.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну с другой формой у меня вс работает, а данной ситуации когда все в одной форме нет. Т.е. данные передаеются, в метод AddToList но наотрез отказываются добавляться в listbox хотя он указан как public...

Все мои три класса находятся в одном модусе Form1.cs 

вот класс Team из которого я обращаюсь к классу Form1:

Код

    public class Team 
    {
        ArrayList al = new ArrayList();
       
        public delegate void addTolistbox(string fname, int realage);
        
        public void DisplayPlayers() 
        {
            Form1 frm1 = new Form1(); 
            frm1.AddToList("S", 23);                     //первый варинат, ниже второй
            addTolistbox add = new addTolistbox(frm1.AddToList);
            foreach(Player pl in al)
            {
                add(pl.name, pl.age);
            }
        }

        public void AddPlayer(Player p) 
        {
            al.Add(p);
        }
    }


Это сообщение отредактировал(а) Darkmaster - 6.6.2007, 16:31
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Naum
Дата 6.6.2007, 16:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

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



Darkmaster, по-моему ты не ходил по ссылке или не дочитал;) 
Код

Form1 frm1 = new Form1();
frm1.Show(); //Добавь эту строчку, а потом подумай почему записи начали добавлятьс в listbox;)
frm1.AddToList("Hey", 1);

Будут еще вопросы - спрашивай.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 6.6.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата(Darkmaster @  6.6.2007,  13:37 Найти цитируемый пост)
            Form1 frm1 = new Form1();

Вот в этом месте у тебя создается новый, совершенно новый экземпляр формы. С чего ты решил, что все изменения этого объекта отобразятся на нужном тебе экземпляре?

Добавлено через 32 секунды
Naum, доступно и понятно smile 
PM MAIL WWW ICQ   Вверх
Darkmaster
Дата 6.6.2007, 16:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



дык, вот, пожтому мну и пытался через делегат поначулу достучаться до listbox'a



Это сообщение отредактировал(а) Darkmaster - 6.6.2007, 16:47
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Darkmaster
Дата 6.6.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



все ребята спассибо за поддержку!! задача решена при помощи делегата! smile
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
ivashkanet
Дата 6.6.2007, 17:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата(Darkmaster @  6.6.2007,  16:04 Найти цитируемый пост)
задача решена при помощи делегата!

Теряюсь в догадках  smile 
Наверное что-то типа  smile 
PM MAIL WWW ICQ   Вверх
Darkmaster
Дата 6.6.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну куда же без магииsmile Просто я привязал метод к делегату уже в классе Form чтобы проще было обращаться к методам другого калсса. А в методу DisplayPlayers в качестве входных данных передавал этот делегат. Вот такая штука.
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
ivashkanet
Дата 6.6.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Darkmaster, нормально  smile 
Что-то типа?
Код

        public void DisplayPlayers(addTolistbox add) 
        {
            foreach(Player pl in al)
            {
                add(pl.name, pl.age);
            }
        }



P.S. Только вот идея коллекции, которая знает как себя показать это, ИМХО, изврат  smile 

Это сообщение отредактировал(а) ivashkanet - 6.6.2007, 17:59
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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