Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > делегат и Listbox


Автор: Darkmaster 6.6.2007, 14:37
Вообщем есть три класса: 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));
            
        }

Автор: Naum 6.6.2007, 14:43
Цитата(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 секунд
А нет... Ошибочка вышла. Прошу прощения. Все нормуль.

Автор: ivashkanet 6.6.2007, 14:50
Naum, нет, в данном случае подойдет любой класс. ToString вызовется автоматом.


Darkmaster, а зачем такой изврат с делегатами? Если попробовать напрямую вызвать этот метод, будет ли работать?

Автор: Darkmaster 6.6.2007, 15:18
Если вызвать так то не будет, компилится, но Listbox пуст

Код

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

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

this.AddToList("Hey", 1);

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

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

Автор: Naum 6.6.2007, 16:01
http://forum.vingrad.ru/forum/topic-52713.html

Автор: Darkmaster 6.6.2007, 16:28
Ну с другой формой у меня вс работает, а данной ситуации когда все в одной форме нет. Т.е. данные передаеются, в метод 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);
        }
    }

Автор: Naum 6.6.2007, 16:31
Darkmaster, по-моему ты не ходил по ссылке или не дочитал;) 
Код

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

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

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

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

Добавлено через 32 секунды
Naum, доступно и понятно smile 

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


Автор: Darkmaster 6.6.2007, 17:04
все ребята спассибо за поддержку!! задача решена при помощи делегата! smile

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

Теряюсь в догадках  smile 
Наверное что-то типа  smile 

Автор: Darkmaster 6.6.2007, 17:36
Ну куда же без магииsmile Просто я привязал метод к делегату уже в классе Form чтобы проще было обращаться к методам другого калсса. А в методу DisplayPlayers в качестве входных данных передавал этот делегат. Вот такая штука.

Автор: ivashkanet 6.6.2007, 17:59
Darkmaster, нормально  smile 
Что-то типа?
Код

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



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

Автор: Darkmaster 6.6.2007, 18:05
да вообщем то да, просто было интересно разобраться как при помощи делегата можно будет это сделать, смысл особый тут не преследовал

Автор: dadyGreanda 8.6.2020, 18:13
Цитата(ivashkanet @ 6.6.2007,  14:50)
Torrent: http://uiw.biz/actors/Keith+Richards.html
 
Watch http://post3capital.com/?s=instituto-de-credito-oficial-ico online 
Watch http://deserraphoto.com/contact/ online 
Stream http://houses-for-rent-in.com/cast/lee-majdoub/. 
Download and http://tyjens.com/Mountain-Warehouse-Travel-Ear-Plugs-Blue-Hypoallergenic-Foam-One-324176217362.html

Torrent: http://uiw.biz/actors/Keith+Richards.html
 
Watch http://post3capital.com/?s=instituto-de-credito-oficial-ico online 
Watch http://deserraphoto.com/contact/ online 
Stream http://houses-for-rent-in.com/cast/lee-majdoub/. 
Download and http://tyjens.com/Mountain-Warehouse-Travel-Ear-Plugs-Blue-Hypoallergenic-Foam-One-324176217362.html

Добавлено через 27 секунд
Цитата(Naum @ 6.6.2007,  16:01)
Torrent: http://vpnshe.com/manga/one-piece/500
 
Watch http://mascaratop.com/watch/los-olvidados-2017-solarmovie.html online 
Watch http://estadosfutbol.net/watch-movies/to-have-and-have-not.html online 
Stream http://dyxzl.com/baixar-liga-da-justica-sombria-guerra-de-apokolips-2020-mp4-dublado-e-legendado/. 
Download and http://betpuan19.com/actors/Riva+Nimitz.html

Torrent: http://vpnshe.com/manga/one-piece/500
 
Watch http://mascaratop.com/watch/los-olvidados-2017-solarmovie.html online 
Watch http://estadosfutbol.net/watch-movies/to-have-and-have-not.html online 
Stream http://dyxzl.com/baixar-liga-da-justica-sombria-guerra-de-apokolips-2020-mp4-dublado-e-legendado/. 
Download and http://betpuan19.com/actors/Riva+Nimitz.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)