Gå til innhold

Windows Forms flickering


Anbefalte innlegg

Skrevet

Hei

 

Jeg bruker i .NET applikasjonen min en TabControl med 3 tabs. Problemet er at når jeg drar musa fra en tab til en annen så flimrer tabbene. Noen som har vært borti noe lignende og vet hvordan jeg kan fikse det?

 

Er Visual C# 2008 i et nesten tomt prosjekt.

Videoannonse
Annonse
Skrevet

Prøv dette:

 

GetType(TabControl).GetProperty("DoubleBuffered", (Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)).SetValue(TabControl1, True, Nothing)

 

Sett inn navnet på din tabcontrol istedenfor TabControl1...

Skrevet (endret)
Jeg har sikkert laget 20 programmer i de siste årene og har aldri hatt noe slikt. Hva er det du egentlig opplever?

 

Lag et program med en TabControl.

Lag 3 tabs.

dra musen mellom de 2 tabbene som IKKE er i fokus.

 

 

Da flimrer den som et gammelt win32 program uten double buffering. Bruker Vista uten desktop composition (e.g. 3d-effekter skrudd av). Jeg synes dette er for svakt for en standard control.

 

(som du kanskje skjønner er jeg ikke normalt .NET utvikler).

Endret av invictus
Skrevet

Vel, lagde et std. windows program. slang på en tab control, med 3 tabs. Kompilerte og kjørte. Nyll flimring. Eneste jeg kan se er at bakgrunnsfargen på tabben som er under musen skifter farge, men det er hverken irriterende eller stugt på noen som helst måte. Skrur nå av effekter for å se...

Nå testet jeg med "Windows standard" tema. Resulterte kunn i at fargeskiftingen forsvant. Men fortsatt ingen irriterende effekter. Skjønner fortsatt ikke hva som er problemet her

Skrevet (endret)
Vel, lagde et std. windows program. slang på en tab control, med 3 tabs. Kompilerte og kjørte. Nyll flimring. Eneste jeg kan se er at bakgrunnsfargen på tabben som er under musen skifter farge, men det er hverken irriterende eller stugt på noen som helst måte. Skrur nå av effekter for å se...

Nå testet jeg med "Windows standard" tema. Resulterte kunn i at fargeskiftingen forsvant. Men fortsatt ingen irriterende effekter. Skjønner fortsatt ikke hva som er problemet her

 

 

Hvis du har Vista, gå på properties for Computer -> Advanced System Settings -> Performance setting.

 

Sett den til adjust for best apperance, men fjern desktop composition før du trykker OK.

 

...og prøv igjen.

 

har nettopp fått dette bekreftet på en annen PC. Ble et øyeblikk redd for at det var noe galt med min PC.

 

 

Prøvde også å kjøre opp et identisk program som .NET programmet, bare skrevet i QT4/C++, og der var det ikke noe flimmer.

 

EDIT: Det synes ekstra godt hvis du resizer vinduet veldig fort...da går tabsene helt amokk. Er ikke meningen å være vanskelig, og jeg beklager hvis jeg oppfattes slik. Er bare svært viktig at vinduet tegner seg opp skikklig.

Endret av invictus
Skrevet (endret)

Prøvde det du sa (Disablet bare desktop compo. i compability tabben på programmets egenskaper), og den flicker ikke mer enn når desktop compo. er slått på... (Når jeg resizer vinduet)

 

Forstår heller ikke hva du mener med at de flicker når man tar musen over dem...

Ingenting av det skjedde her...

 

edit:

	Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
	Get
		Dim cp As CreateParams = MyBase.CreateParams
		cp.ExStyle = cp.ExStyle Or &H2000000 'WS_EX_COMPOSITED
		Return cp
	End Get
End Property

 

Tok meg 2 minutt å finne på google :roll:

Legg den i formen din sin kode.

Endret av Wubbable
Skrevet

Aner ikke, hadde ikke tvilt på om det ikke gikk.

 

Du har jo &= i VB, men det er noe helt annet.

 

Hva er egentlig poenget med ReadOnly eller WriteOnly i VB properties? :p

Redundancy spør du meg.

Skrevet (endret)
Pussig. Nå ser jeg det. Det rare er jo at ingen andre programmer i Windows oppfører seg slik. Men hjalp det noe med forslagene til de andre her?

 

Hei. Takk for tilbakemeldingene. Du har helt rett i at ingen andre Windows programmer oppfører seg slik. Det er det som gjør det ekstra irriterende.

 

 

Den CreateParams løsningen fungerte faktisk (!). Synes jo selvfølgelig det er litt håpløst å måtte subclasse TabControl. Denne burde være on by default fra Microsoft mener jeg.

 

EDIT: fungerer hvis jeg bruker CreateParams løsningen på formen også. Utrolig at ikke dette skal være enabled by default! Hva slags kode er egentlig 0x2000000 i klassiske Win32 defines?

Endret av invictus
Skrevet
Hva slags kode er egentlig 0x2000000 i klassiske Win32 defines?

 

WS_EX_COMPOSITED

 

Paints all descendants of a window in bottom-to-top painting order using double-buffering.

 

Hva er ulempen med denne ettersom den må eksplisitt skrus på?

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...