Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Событие происходит 2 раза / 5 сообщений из 5, страница 1 из 1
15.06.2004, 15:04
    #32561787
Alexander Rudenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие происходит 2 раза
Хочу построить компонет типа DropDownPanel.

Унаследовал его от Panel.
Присоединил к неуму PanelDesigner.

Внутри класса создается контрол LinkButton (для того, чтоб можно было сворачивать нижнюю часть):
Код: plaintext
1.
2.
3.
4.
5.
      //Add LinkButton
      lnbSowHide = new LinkButton();

      lnbSowHide.ID = "lnbShowHide";
      lnbSowHide.Click += new System.EventHandler(this.Button_Click);
      Controls.Add(lnbSowHide);

Внутри написан обработчик нажатия:
Код: plaintext
1.
2.
3.
    private void Button_Click(object sender, System.EventArgs e)
    {
      ShowSection = !ShowSection;
    }

Переопределил отрисовку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
    protected override void Render(HtmlTextWriter output)
    {

      // Add WebControl Formatting
      AddAttributesToRender(output);

      // Open table
      output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
      output.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "1");
      output.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "1");
      if (ShowSection)
      {
       // output.AddAttribute(HtmlTextWriterAttribute.Style, "height:25px");
      }


      output.RenderBeginTag( HtmlTextWriterTag.Table);

      // Create first row
      output.RenderBeginTag( HtmlTextWriterTag.Tr);
      output.AddAttribute(HtmlTextWriterAttribute.Height, "25");
      output.AddAttribute(HtmlTextWriterAttribute.Bgcolor, "LightSteelBlue");
      output.RenderBeginTag( HtmlTextWriterTag.Td);
      lnbSowHide.RenderControl(output);
      output.RenderEndTag();
      output.RenderEndTag();

      // Create second row
      if (ShowSection)
      {
        output.RenderBeginTag( HtmlTextWriterTag.Tr);
        output.RenderBeginTag( HtmlTextWriterTag.Td);
        for (int i =  0 ; i <= Controls.Count - 1 ; i++)
        {
          if (!(Controls[i].ID == lnbSowHide.ID))
            Controls[i].RenderControl(output);
        }
        output.RenderEndTag();
        output.RenderEndTag();
      }
      // Close table
      output.RenderEndTag();
    }


Теперб, когда помещаю на форму и выполняю, то после первого раза панель схлопывается и никогда больше не расскрывается.

Если свойство ShowSection менять снаружи компонента (по нажатию на кнопку) то все нормально сворачивается и разворачивается
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    private void Button1_Click(object sender, System.EventArgs e)
    {
      ShowHidePanel1.ShowSection = true;
    }

    private void Button2_Click(object sender, System.EventArgs e)
    {
      ShowHidePanel1.ShowSection = false;
    }

Если снаружи написать:
Код: plaintext
1.
2.
3.
    private void Button3_Click(object sender, System.EventArgs e)
    {
      ShowHidePanel1.ShowSection = !ShowHidePanel1.ShowSection;
    }
То изменение происходить тоже только один раз.

Что делать?
...
Рейтинг: 0 / 0
15.06.2004, 15:45
    #32561904
Alexander Rudenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие происходит 2 раза
Мне кажется, что это не событие происходит 2 раза, а не сохраняется предыдущее состояние компонента.

Если это так, то как его сохранить?
...
Рейтинг: 0 / 0
15.06.2004, 17:20
    #32562210
Ustazz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие происходит 2 раза
А ShowSection где хранится между постбеками?
...
Рейтинг: 0 / 0
15.06.2004, 17:28
    #32562225
Alexander Rudenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие происходит 2 раза
Получается, что нигде оно не хранится. А должно.

Как бы мне реализовать его хранение?
...
Рейтинг: 0 / 0
15.06.2004, 18:50
    #32562406
Alexander Rudenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие происходит 2 раза
Вопрос решился следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    public bool ShowSection
    {
      get
      {
        if (ViewState["showsection"] == null) 
          return true;
        else
          return (string)this.ViewState["showsection"] == "True";
      }

      set
      {
        this.ViewState["showsection"] = value.ToString();
      }
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Событие происходит 2 раза / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]