В том, чем действительно Управляет точка в жизненном цикле управления. Видимый рендеринг остановки?

Все зависит от того, как вы определяете «нормализовать». Одно из возможных расширений этого термина состоит в том, чтобы сказать, что результатом этой операции является любой вектор длины единицы (здесь я в основном использую (1, 0, 0)). Это полезно, например, когда вам нужна нормализация для возврата направления к границе круга из заданной точки.

7
задан The Digital Gabeg 21 October 2009 в 01:54
поделиться

4 ответа

Вместо изменения свойства «Visible» попробуйте следующее:

    protected override void Render(HtmlTextWriter writer)
    {
        if (queue.Count > 0)
            base.Render(writer);
    }
3
ответ дан 7 December 2019 в 01:23
поделиться

Если у вас есть код, который должен работать в PreRender, даже если элемент управления невидим (так что параметр Visible = true в OnLoad не является решением), вы можете Преимущество того факта, что событие PreRender страницы будет всегда срабатывать.

protected void AlwaysPreRender( object sender, EventArgs e )
{
    if ( /* some condition */ )
    {
        this.Visible = true;
    }
    // else leave Visible as it was
}

protected override void OnLoad(EventArgs e)
{
    Page.PreRender += this.AlwaysPreRender;
}

Это также касается возможности того, что родитель элемента управления (или другой предок) невидим. В этом случае OnPreRender элемента управления не сработает, даже если вы убедитесь, что Visible = true для самого элемента управления.

2
ответ дан 7 December 2019 в 01:23
поделиться

I actually figured this out myself, and I thought the answer would be useful to the community.

It looks like a control which has Control.Visible set to false actually stops sometime after the Page_Load event. The trick here is that the Control.Visible property is loaded into ViewState. So if there are no messages on the first page hit, then the control sets itself to Visible = false, and never again reaches either CreateChildControls or OnPreRender.

The solution is to reset the control's visibility in one of the earlier events which aren't skipped. The following change solved my problem:

protected override void OnLoad(EventArgs e)
{
--> this.Visible = true;
    this.Controls.Clear();
    base.OnLoad(e);
}
5
ответ дан 7 December 2019 в 01:23
поделиться

I suggest using OnInit instead:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    this.Visible = (queue.Count > 0);

    if (this.Visible)
    {
        while (queue.Count > 0)
        {
            MessageItem message = queue.Dequeue();
            this.Controls.Add(new LiteralControl(message.ToString()));
        }
    }
}
0
ответ дан 7 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: