powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Событие происходит 2 раза
5 сообщений из 5, страница 1 из 1
Событие происходит 2 раза
    #32561787
Alexander Rudenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу построить компонет типа 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
Событие происходит 2 раза
    #32561904
Alexander Rudenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, что это не событие происходит 2 раза, а не сохраняется предыдущее состояние компонента.

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

Как бы мне реализовать его хранение?
...
Рейтинг: 0 / 0
Событие происходит 2 раза
    #32562406
Alexander Rudenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос решился следующим образом:
Код: 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
5 сообщений из 5, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Событие происходит 2 раза
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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