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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработчик для массива объектов 
V
    Опции темы
neic
Дата 21.9.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем, есть массив экземпляров
Код

QQ[] qqt = new QQ[10];


У объекта есть событие, допустим On.

Код

qqt[0] = new QQ();
qqt[0].on += new QQ.onEventHandler(qqt_on);


Код

//обработчик
private void qqt_on()
{
//код
}


Как мне узнать какой из экземпляров вызвал это событие? Т.е. если qqt[0], то вывести 0; если qqt[1], то вывести 1 и т.д.

Это сообщение отредактировал(а) neic - 21.9.2010, 11:09
PM MAIL WWW ICQ Skype   Вверх
CYBERDREAM
Дата 21.9.2010, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


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

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



а какой делегат события у тебя?


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
neic
Дата 21.9.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

public delegate void OnDelegate();

PM MAIL WWW ICQ Skype   Вверх
Kaerus
Дата 21.9.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WPF'er
*


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

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



Используй делегат System.EventHandler
Код

public delegate void EventHandler(
    Object sender,
    EventArgs e
)

а в sender передавай свои экземпляр

Это сообщение отредактировал(а) Kaerus - 21.9.2010, 15:14
PM MAIL ICQ   Вверх
CYBERDREAM
Дата 21.9.2010, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


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

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



Код

class Program
    {
        static void Main()
        {
            QQ[] massive = new QQ[] { new QQ("one"), new QQ("Two"), new QQ("art"), };
            foreach (QQ qq in massive)
                qq.On += qq_On;

            massive[2].Value = 1;

            massive[0].Title = "New title for the object";
            Console.ReadLine();

        }

        static void qq_On(object sender,EventArgs arg)
        {
            Console.WriteLine("Changed: " + sender);
        }

        

        internal class QQ
        {
            private string _title;
            public String Title
            {
                get { return _title; }
                set
                {
                    if (String.Compare(_title, value, StringComparison.CurrentCultureIgnoreCase) == 0) return;

                    _title = value;
                    RaiseObjectChanged();
                }
            }

            private double _value;
            public Double Value
            {
                get { return _value; }
                set
                {
                    if (value == _value)
                        return;

                    _value = value;
                    RaiseObjectChanged();
                }
            }


            public QQ(String title)
            {
                Title = title;
            }

            public override string ToString()
            {
                return Title;
            }

            public event EventHandler On;

            public void RaiseObjectChanged()
            {
                if (On != null)
                    On(this,new EventArgs());

            }
        }
    }



--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
neic
Дата 21.9.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А можно ли как-нибудь добиться этого результата, например:
Код

int index;
index = qqt.Select; //знаю что селект это не то, я хотел сказать которые сейчас выбран (вызван)


CYBERDREAM
Вся проблема, что я юзаю стороннюю .dll

И когда произойдет этот вызов я не знаю (т.е. событие вызывается не в программе, а в dll)

Вот приведу пример из VB6:

Код

Private Sub Command1_Click(Index As Integer)
MsgBox ("Была нажата кнопка № = " & Index)
End Sub


Что я хочу получить в C#:
Код

private void qqt_on(int index) //где index - индекс экземпляра
{
    MessageBox.Show(index);
    qqt[index].method();
}


Это сообщение отредактировал(а) neic - 21.9.2010, 12:24
PM MAIL WWW ICQ Skype   Вверх
CYBERDREAM
Дата 21.9.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


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

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



Цитата(neic @ 21.9.2010,  12:11)
А можно ли как-нибудь добиться этого результата, например:
Код

int index;
index = qqt.Select; //знаю что селект это не то, я хотел сказать которые сейчас выбран (вызван)


CYBERDREAM
Вся проблема, что я юзаю стороннюю .dll

И когда произойдет этот вызов я не знаю (т.е. событие вызывается не в программе, а в dll)

Вот приведу пример из VB6:

Код

Private Sub Command1_Click(Index As Integer)
MsgBox ("Была нажата кнопка № = " & Index)
End Sub


Что я хочу получить в C#:
Код

private void qqt_on(int index) //где index - индекс экземпляра
{
    MessageBox.Show(index);
    qqt[index].method();
}

на счет index = qqt.Select; не понял, что значит эта строка.
Если делегат события не имеет параметров, которые указывают на вызвавший объект, то даже не представляю как понять какой объект вызывал событие.



--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
CYBERDREAM
Дата 21.9.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


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

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



Код

public delegate void QQConnectedHandler(MyQQ sender);

public class MyQQ:QQ
{
    public MyQQ()
    {
        onConnect += MyQQOnConnect;
    }

    void MyQQOnConnect()
    {
        if (OnConnectExtended != null)
            OnConnectExtended(this);
    }

    public event QQConnectedHandler OnConnectExtended;
}

{
    .................
    .................
    QQ[0].OnConnectExtended += new QQConnectedHandler(OnConnectExtended);
}
void OnConnectExtended(MyQQ sender)
{
    //вот ты и получил его;
}



Добавлено через 5 минут и 21 секунду
вот весь пример
Код

#region

using System;

#endregion

namespace delCON
{
    class Program
    {
        static void Main()
        {
            MyQQ[] massive = new[] { new MyQQ("one"), new MyQQ("Two"), new MyQQ("art"), };
            foreach (MyQQ qq in massive)
                qq.OnConnectExtended += qq_OnConnectExtended;

            massive[2].Value = 1;

            massive[0].Title = "New title for the object";
            Console.ReadLine();
        }

        static void qq_OnConnectExtended(MyQQ sender)
        {
            Console.WriteLine("Changed: " + sender);
        }


        internal class QQ
        {
            private string _title;
            public String Title
            {
                get { return _title; }
                set
                {
                    if (String.Compare(_title, value, StringComparison.CurrentCultureIgnoreCase) == 0) return;

                    _title = value;
                    RaiseObjectChanged();
                }
            }

            private double _value;
            public Double Value
            {
                get { return _value; }
                set
                {
                    if (value == _value)
                        return;

                    _value = value;
                    RaiseObjectChanged();
                }
            }


            public QQ(String title)
            {
                Title = title;
            }

            public override string ToString()
            {
                return Title;
            }

            public event QQConnectedHandler On;

            public void RaiseObjectChanged()
            {
                if (On != null)
                    On();

            }
        }

        public delegate void QQConnectedHandler();
        public delegate void MyQQConnectedHandler(MyQQ sender);

        public class MyQQ : QQ
        {
            public MyQQ(String title)
                :base(title)
            {
                On += MyQQ_On;
            }

            void MyQQ_On()
            {
                if (OnConnectExtended != null)
                    OnConnectExtended(this);
            }
            public event MyQQConnectedHandler OnConnectExtended;
        }
    }
}



--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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