Avatar billede danm Nybegynder
27. maj 2006 - 00:29 Der er 3 kommentarer og
1 løsning

Hjælp til at forklare denne C# kode (skal laves om t vb2005 kode)

Hej

Jeg har haft et problem med at når der bruges baggrundsbilleder i vs2005 på formen, bliver visningen af formens objekter meget langsomt (nærmest en efter en som man kan se, meget træls). På microsofts forums var der en der havde skrevet et link hvor der var en der havde skrevet denne kode til en der havde haft samme promlem i C# i vs2005.
Jeg kan dog ikke C# endnu, så mon der er en der kan give mig en vb2005 version af dette? Og måske forklarte kort hvad den laver..

linket er:
http://www.mp3car.com/vbulletin/archive/index.php/t-65332.html

Men ved ikke om det er nødvendigt. Her er koden svaret med koden:

Hi!

I've had same problem, and I just tested below and it seems much faster.

protected override void OnPaintBackground(PaintEventArgs e)
{
// if backgroundimage is set, use it
if (BackgroundImage != null)
{
e.Graphics.DrawImage(BackgroundImage, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel);
}
else
{
// else paint with backcolor
using (SolidBrush brush = new SolidBrush(BackColor))
{
e.Graphics.FillRectangle(brush, e.ClipRectangle);
}
}
}

Looks like that originally forms background paint isn't very efficient...

But this only works when backgroundimage isn't scaled.
Avatar billede arne_v Ekspert
27. maj 2006 - 00:30 #1
http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx giver

Protected Overloads Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
If Not (BackgroundImage Is Nothing) Then
  e.Graphics.DrawImage(BackgroundImage, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel)
Else
  ' Using
  Dim brush As SolidBrush = New SolidBrush(BackColor)
  Try
    e.Graphics.FillRectangle(brush, e.ClipRectangle)
  Finally
    CType(brush, IDisposable).Dispose()
  End Try
End If
End Sub
Avatar billede danm Nybegynder
28. maj 2006 - 23:28 #2
Ok, smid svar..

Ved du hvad det er den gør koden?
Avatar billede arne_v Ekspert
28. maj 2006 - 23:34 #3
jeg kan gætte mig lidt til det udfra navnene

det eneste tricky er vel C# using som bliver til en VB.NET try finally

og det er for at sikre sig at Dispose mdetoden bliver kaldt uanset hvad
(for at undgå en ressource leak)
Avatar billede arne_v Ekspert
09. juli 2006 - 04:17 #4
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester