Re: Добавляем Click event к ListBox
От: ksg71 Германия  
Дата: 04.03.05 13:09
Оценка: 8 (1)
Здравствуйте, dmaster1, Вы писали:

D>Всем привет!

D>У контрола ListBox нет ивента OnClick. Подскажите плиз, как его организовать?


примерно так

public class ListBoxEx : System.Web.UI.WebControls.ListBox, IPostBackEventHandler
    {
        public event System.EventHandler Click;
    
        protected virtual void OnClick(EventArgs e)
        {
            if (Click != null)
            {
                Click(this, e);
            }
        }
        #region IPostBackEventHandler Members

        public void RaisePostBackEvent(string eventArgument)
        {
            OnClick(new EventArgs());
        }

        #endregion

        protected override void OnPreRender(EventArgs e)
        {
            Attributes.Add("onClick", Page.GetPostBackEventReference(this));
            base.OnPreRender (e);

        }

    }
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Добавляем Click event к ListBox
От: dmaster1  
Дата: 04.03.05 12:37
Оценка:
Всем привет!
У контрола ListBox нет ивента OnClick. Подскажите плиз, как его организовать?
Re: Добавляем Click event к ListBox
От: Аноним  
Дата: 04.03.05 14:38
Оценка:
Неправильно!!!!!!!!!!!
System.Web.UI.WebControls.ListBox уже реализует IPostBackEventHandler! Так вы нарушите функциональность базового класса!
Надо переопределить
protected override void AddAttributesToRender(HtmlTextWriter writer)


где добавить аттрибут "onclick", в Page.GetPostBackEventReference передавать командный аргумент, а в перепределенном RaisePostBackEvent ловить коммандный аргумент и в зависимости от его значения выполнять свои действия или вызывать этот метод базового класса.
[tagline]
Все должно быть просто, очень просто, настолько просто — насколько это возможно!
<hr />данное сообщение получено с www.gotdotnet.ru<br />
ссылка на [url=http://www.gotdotnet.ru/forums/ASPNET/128610.aspx]оригинальное сообщение
Re[2]: Добавляем Click event к ListBox
От: dmaster1  
Дата: 04.03.05 14:58
Оценка:
Здравствуйте, ksg71, Вы писали:

K>Здравствуйте, dmaster1, Вы писали:


D>>Всем привет!

D>>У контрола ListBox нет ивента OnClick. Подскажите плиз, как его организовать?


K>примерно так


K>
K>public class ListBoxEx : System.Web.UI.WebControls.ListBox, IPostBackEventHandler
K>    {
K>        public event System.EventHandler Click;
    
K>        protected virtual void OnClick(EventArgs e)
K>        {
K>            if (Click != null)
K>            {
K>                Click(this, e);
K>            }
K>        }
K>        #region IPostBackEventHandler Members

K>        public void RaisePostBackEvent(string eventArgument)
K>        {
K>            OnClick(new EventArgs());
K>        }

K>        #endregion

K>        protected override void OnPreRender(EventArgs e)
K>        {
K>            Attributes.Add("onClick", Page.GetPostBackEventReference(this));
K>            base.OnPreRender (e);

K>        }

K>    }
K>


Благодарю за отзывчивость.

Как раз то, что нужно!

Кстати, хотелось бы разобраться с созданием своих собственных контролов. Подскажите плиз, с чего начать и где читнуть ???
Re[2]: Добавляем Click event к ListBox
От: ksg71 Германия  
Дата: 04.03.05 15:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Неправильно!!!!!!!!!!!

А>System.Web.UI.WebControls.ListBox уже реализует IPostBackEventHandler! Так вы нарушите функциональность базового класса!
А>Надо переопределить
А>
protected override void AddAttributesToRender(HtmlTextWriter writer)


А> где добавить аттрибут "onclick", в Page.GetPostBackEventReference передавать командный аргумент, а в перепределенном RaisePostBackEvent ловить коммандный аргумент и в зависимости от его значения выполнять свои действия или вызывать этот метод базового класса.


А>
данное сообщение получено с www.gotdotnet.ru

А>ссылка на оригинальное сообщение



RaisePostBackEvent метод не полиморфный, способ вызвать
событие — реализовать интерфейс явно, во всяком вариант работает не
нарушая функциональности базового класса. Покажите Ваш вариант
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[2]: Добавляем Click event к ListBox
От: dmaster1  
Дата: 04.03.05 15:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Неправильно!!!!!!!!!!!

А>System.Web.UI.WebControls.ListBox уже реализует IPostBackEventHandler! Так вы нарушите функциональность базового класса!
А>Надо переопределить
А>
protected override void AddAttributesToRender(HtmlTextWriter writer)


А> где добавить аттрибут "onclick", в Page.GetPostBackEventReference передавать командный аргумент, а в перепределенном RaisePostBackEvent ловить коммандный аргумент и в зависимости от его значения выполнять свои действия или вызывать этот метод базового класса.


А>
данное сообщение получено с www.gotdotnet.ru

А>ссылка на оригинальное сообщение


Сделал следующее:

public class ListBoxEx : System.Web.UI.WebControls.ListBox
{
public event System.EventHandler Click;

protected virtual void OnClick(EventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}

#region IPostBackEventHandler Members
public void RaisePostBackEvent(string eventArgument)
{
switch(eventArgument)
{
case "DoClick":
{
OnClick(new EventArgs());
break;
}
}
}
#endregion

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
Attributes.Add("onClick", Page.GetPostBackEventReference(this,"DoClick"));
base.AddAttributesToRender (writer);
}

Не канает!
При клике на списке постоятнно вызывается AddAttributesToRender. До RaisePostBackEvent даже дело не доходит!

Где моя ошибка?
Re[3]: Добавляем Click event к ListBox
От: ksg71 Германия  
Дата: 04.03.05 15:31
Оценка:
Здравствуйте, dmaster1, Вы писали:

D>Здравствуйте, ksg71, Вы писали:


K>>Здравствуйте, dmaster1, Вы писали:


D>>>Всем привет!

D>>>У контрола ListBox нет ивента OnClick. Подскажите плиз, как его организовать?


K>>примерно так


K>>
K>>public class ListBoxEx : System.Web.UI.WebControls.ListBox, IPostBackEventHandler
K>>    {
K>>        public event System.EventHandler Click;
    
K>>        protected virtual void OnClick(EventArgs e)
K>>        {
K>>            if (Click != null)
K>>            {
K>>                Click(this, e);
K>>            }
K>>        }
K>>        #region IPostBackEventHandler Members

K>>        public void RaisePostBackEvent(string eventArgument)
K>>        {
K>>            OnClick(new EventArgs());
K>>        }

K>>        #endregion

K>>        protected override void OnPreRender(EventArgs e)
K>>        {
K>>            Attributes.Add("onClick", Page.GetPostBackEventReference(this));
K>>            base.OnPreRender (e);

K>>        }

K>>    }
K>>


D>Благодарю за отзывчивость.


D>Как раз то, что нужно!


D>Кстати, хотелось бы разобраться с созданием своих собственных контролов. Подскажите плиз, с чего начать и где читнуть ???



вот тут их полно
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[3]: Добавляем Click event к ListBox
От: ksg71 Германия  
Дата: 04.03.05 15:40
Оценка:
Здравствуйте, ksg71, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Неправильно!!!!!!!!!!!

А>>System.Web.UI.WebControls.ListBox уже реализует IPostBackEventHandler! Так вы нарушите функциональность базового класса!
А>>Надо переопределить
А>>
protected override void AddAttributesToRender(HtmlTextWriter writer)


А>> где добавить аттрибут "onclick", в Page.GetPostBackEventReference передавать командный аргумент, а в перепределенном RaisePostBackEvent ловить коммандный аргумент и в зависимости от его значения выполнять свои действия или вызывать этот метод базового класса.


А>>
данное сообщение получено с www.gotdotnet.ru

А>>ссылка на оригинальное сообщение



K>RaisePostBackEvent метод не полиморфный, способ вызвать

K>событие — реализовать интерфейс явно, во всяком вариант работает не
K>нарушая функциональности базового класса. Покажите Ваш вариант


Хотя бесспорно, что то работать не будет, AutoPostBack к примеру не
отключишь , но это не из-за реализации
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[3]: Добавляем Click event к ListBox
От: Аноним  
Дата: 04.03.05 15:56
Оценка:
Сорри, можно сделать как предложено во 2 посте...
Я перепутал IPostBackDataHandler и IPostBackEventHandler. System.Web.UI.WebControls.ListBox реализует первый интерфейс.
[tagline]
Все должно быть просто, очень просто, настолько просто — насколько это возможно!
<hr />данное сообщение получено с www.gotdotnet.ru<br />
ссылка на [url=http://www.gotdotnet.ru/forums/ASPNET/128673.aspx]оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.