Sub SetLabel()
        Dim II As Integer
        For II = 0 To 41
            DateLabel(II) = New Label
            Me.Controls.Add(DateLabel(II))
            With DateLabel(II)
                .TextAlign = ContentAlignment.MiddleCenter
                .BackColor = Color.White
                .AutoSize = False
                .Size = New Size(29, 17)
                .Top = 49 + (II \ 7) * 21
                .Left = 5 + (II Mod 7) * 33
                .Text = II + 1
                .BringToFront()
            End With
        Next
    End Sub1G内存,Vs2005下,40个Label竟然需要1秒钟——因为要做成控件。
这种明显有刷新缓慢的现象,肯定是不成的。
我用——固定模式,事先放上去40个Label,加载同样的慢,应该不是代码的问题。
怎么解决呢?VB下,我自己的控件,一次性上百个,都感觉不到丝毫延迟的
.Net下,怎么解决类似的问题啊?

解决方案 »

  1.   

    这是因为容器控件不停重绘导致的性能低下
    在 进入 For 前
    Me.Controls.SuspendLayout();
    然后再 For
    循环完全 End 后

    Me.Controls.ResumeLayout();应该可以大大提高显示性能写个耗用时间语句对比一下
      

  2.   


    不好意思
    应该是
    Me.SuspendLayout() 和 Me.ResumeLayout()
    刚刚多写了个 Controls
      

  3.   

    //用Label很浪费,参考直接绘制
        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            ' Create string to draw.
            Dim drawString As String
            Dim drawFont As Font = Font
            Dim drawBrush As New SolidBrush(Color.Black)
            Dim i As Integer
            Dim drawRect As RectangleF
            Dim drawFormat As New StringFormat
            drawFormat.Alignment = StringAlignment.Center
            drawFormat.LineAlignment = StringAlignment.Center
            For i = 0 To 41
                drawString = i + 1
                drawRect = New RectangleF(5 + (i Mod 7) * 33, 49 + (i \ 7) * 21, 29.0F, 17.0F)            e.Graphics.FillRectangle(Brushes.White, 5 + (i Mod 7) * 33, 49 + (i \ 7) * 21, 29, 17)            e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect, drawFormat)
            Next
        End Sub
      

  4.   

    闪动的话
    再把
    Me的Visible先设false
    最后恢复true
      

  5.   

    Me的Visible先设false
    也是不行的,还是闪动的
      

  6.   

    zswang,谢谢您的代码,但是直接绘制——相应的事件如何处理??
      

  7.   

    代码就是上边这么多——我是想做一个带中文日期的日历控件,呵呵——Winform做控件,样式远没有B/S得好控制阿
      

  8.   

    只要解决了这个问题——不是代码处理的问题,代码还是比较容易得了。VB做出来都没有太多难度——.Net怎么还能有这种问题,真是的。
      

  9.   

    嗬嗬,非常感谢zswang(伴水清清)(专家门诊清洁工) 50分少了点啊
    回头补一下~~
      

  10.   

    .net在调试的时候是很明显,还好实际运行的时候没这么明显。