【问题标题】:Delay in generation of dynamic controls in VB.NETVB.NET 中动态控件的生成延迟
【发布时间】:2013-01-26 16:07:32
【问题描述】:

我正在尝试使用 VB.NET 在 .NET 中生成 1x1 像素图像的网格,使用以下代码:

对于 i = 1 到 500 将 img 调暗为新的 ImageButton img.ID = "ibtn" + i.ToString img.ImageUrl = "图像/设计/click.gif" form1.FindControl("upperpanel").Controls.Add(img) 下一个

问题是当我在 page_load 事件上运行它时生成 HTML 需要很长时间。谁能帮我加快控件的渲染速度。
另外
,我想在每个图像按钮上添加 Click 事件。我怎样才能做到这一点 ??
谢谢

【问题讨论】:

  • 为什么需要创建 500 个连续的 1x1 像素图像?
  • 有些项目使用重叠的面板/分区..

标签: vb.net delay


【解决方案1】:

好的,首先要做的是获得一次面板控制。其次,创建您的 click 方法,然后添加您的处理程序。这需要在页面加载事件之前完成。当您需要添加处理程序时,使用 page_Init 事件来创建按钮。

    Private Sub WebForm1_Init(sender As Object, e As EventArgs) Handles Me.Init
    Dim tempPanel As Panel = form1.FindControl("upperpanel")

    If tempPanel Is Nothing Then
        Return
    End If

    For i = 1 To 500
        Dim img As New ImageButton
        img.ID = "ibtn" + i.ToString
        img.ImageUrl = "images/design/click.gif"
        AddHandler img.Click, AddressOf ImageButton_Click
        tempPanel.Controls.Add(img)
    Next
End Sub

Protected Sub ImageButton_Click(sender As Object, e As ImageClickEventArgs)
    Dim tempImageButton As ImageButton = CType(sender, ImageButton)

    Select Case tempImageButton.ID
        Case "ibtn1"
                    'blah
        Case Else
    End Select

End Sub

就性能而言,预先设置面板控制将提高性能。应该不多吧。创建 500 个按钮需要一些时间。

【讨论】:

  • @Robert Beaubien:非常感谢您的帮助。我真诚地请求您解释一下您在 init 而不是 page_load(我正在这样做)中这样做的原因。谢谢.. 而且,如果你能帮忙解决这个问题:如果我将面板的大小调整为 400x400,这将为我生成 160,000 像素或生成的图像……但它们散布在整个页面上,而不是限制在面板内。我怎样才能做到这一点 ??另外,当我点击说第 150000 个像素时,我得到一个 HTML 异常,指出请求太长......这可能是什么原因??
  • 生成 160000 个单独的图像按钮可能会溢出很多。我认为您需要重新考虑您的实施。我不确定您要做什么,但可能有更好的方法。至于为什么需要使用 init 事件,您必须在流程的早期附加处理程序。如果你不这样做,它就行不通。以下是有关页面生命周期的更多信息:msdn.microsoft.com/en-us/library/ms178472(v=VS.100).aspx
  • @RobertBeaubien 我必须为此目的使用透明单像素图像网格。 :( 无论如何,非常感谢您的帮助。
猜你喜欢
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
相关资源
最近更新 更多