[C#] GroupBox leegmaken

Pagina: 1
Acties:

Onderwerpen


  • Daan199269
  • Registratie: Mei 2011
  • Laatst online: 09-07 15:32
Lieve mede-tweakers,

Ik ben bezig met een Hangman spelletje.
Hierbij komt ook daadwerkelijk een mannetje te hangen zodra je het woord niet goed hebt.

Dit mannetje wordt aangemaakt binnen in een GroupBox.
Echter krijg ik het op geen enkele manier voor mekaar om de GroupBox leeg te krijgen.

Ik heb mijn surface zo opgebouwd:
code:
1
2
Graphics surface;
surface = grpBox1.CreateGraphics();


Nu heb ik onder dit stukje script nog het volgende gehangen:
code:
1
grpBox1.Controls.Clear();


Maar zodra ik dit doe verwijderd hij geen van mijn gemaakte lijnen.
Volgens wat ik vindt op google zou het op deze manier gewoon moeten werken...

Zou een van jullie mij opweg willen helpen?

Ik weet helaas niet hoe ik dit stukje script in zo'n code vak zet, graag hoor ik hoe ik dat wel moet doen :)

Met vriendelijke groet,
Daan

[ Voor 6% gewijzigd door Daan199269 op 30-08-2012 13:55 ]


  • azerty
  • Registratie: Maart 2009
  • Laatst online: 17-09 08:24
code:
1
2
[code]
[/code]


;)

Verder, welke programmeertaal is dit exact, en hoe voeg je een lijn toe?

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-09 16:19

alienfruit

the alien you never expected

surface.Clear()

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Titlefix:
How can I clear my groupbox? >> [C#] GroupBox leegmaken

If you would alsjeblieft let on that for the next keer because we speaken Dutch hier ;) Daarbij is het handig als je je topic voorziet van een tag over welke taal 't gaat en code tags gebruikt voor 't posten van code.
wsitedesign schreef op donderdag 30 augustus 2012 @ 11:25:
Verder, welke programmeertaal is dit exact
99% zeker weten C#; afgaand op TS's vorige topics, het bestaan van een GroupBox die een CreateGraphics method heeft en 't gebruik van C# syntax.

[ Voor 41% gewijzigd door RobIII op 30-08-2012 11:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Je gaat compleet de verkeerde richting op. Ten eerste is een GroupBox bedoelt voor het groepen van Controls (dwz buttons, textboxes en dat soort dingen) met een mooi randje er omheen en een titel erboven. Dat lijkt me niet echt van toepassing voor een tekening. Daarvoor gebruik je beter een PictureBox.

Verder moet je de manier van tekenen compleet omgooien. Op het moment denk je dat je een lijn kan tekenen die ten alle tijden blijft bestaan totdat jij die lijn vertelt dat hij weer moet verdwijnen. Dat is een typische fout die veel mensen maken, zo werkt tekenen in C# niet. De lijnen die je tekent zijn geen fysieke objecten die je kunt aanspreken, je tekent iets en daar heb je daarna totaal geen controle meer over, de tekening bestaat niet behalve op je scherm.

Verder kan de Control waar je op tekent (dat zou dus beter een PictureBox moeten zijn) op elk moment zomaar refreshen (bij een resize, als er een venster voor schuift, als windows daar zin in heeft, etc), en op dat moment ben je je tekening kwijt. Gelukkig heeft elke Control een Paint event die aangeroepen wordt als dit gebeurt, waarop je kan reageren door je tekening opnieuw te tekenen.


Het concept wat je dus moet volgen is als volgt:
- De tekening die je wil maken bestaat uit data, vaak bijvoorbeeld de begin en eind posities van lijnen, rechthoeken, kleuren, etc. Die data moet je in het geheugen houden (door een globale variabele bijvoorbeeld).
- Elke keer dat de control waar je op tekent wil refreshen moet jij je tekening opnieuw maken. Dit doe je in de Paint event van de control.
- Zodra je de tekening wil aanpassen pas je eerst de data aan waaruit de tekening bestaat, en daarna roep je control.Invalidate() of control.Refresh() aan om de refresh te forceren.


Je moet dus afstappen van het idee dat je iets fysiek tekent wat je later weer kan oppakken en aanpassen, dat klopt niet. Je moet precies andersom denken: je tekening bestaat uit data die je wel kunt aanpassen (wil je je tekening verwijderen dan clear je dus de data, en niet de tekening), en zodra de tekening moet veranderen moet jij even aangeven dat de control zichzelf opnieuw moet tekenen.


Een goed voorbeeld kun je hier vinden (eerste post):
http://www.vbforums.com/s...Manipulating-GDI-Drawings

met bijbehorende blog post die het een en ander duidelijk uitlegt:
http://jmcilhinney.blogsp...ulating-gdi-drawings.html

De blog post gaat veel in detail over de manier waarop je met de muis de tekening kan maken, wat in jou geval niet zo van toepassing is. Uit die stukjes is vooral belangrijk dat hij dus de muis posities opslaat (dit is de data waar ik het over heb) en die later gebruikt om de tekening te tekenen. In jou geval sla je de data ergens anders op (je moet toch op een of andere manier de coordinaten van de lijnen hebben die je hangman definieren) maar het idee is hetzelfde.

[ Voor 8% gewijzigd door NickThissen op 30-08-2012 13:41 ]

Mijn iRacing profiel


  • Daan199269
  • Registratie: Mei 2011
  • Laatst online: 09-07 15:32
Heel erg bedankt voor de reactie's!
Excuus voor het vergeten te melden welke programmeer taal dit was.

Ik ben bezig met de Manipulating GDI Drawings momenteel, mocht ik daarna nog vragen hebben dan laat ik het weten!

Met vriendelijke groet,
Daan

  • azerty
  • Registratie: Maart 2009
  • Laatst online: 17-09 08:24
RobIII schreef op donderdag 30 augustus 2012 @ 11:52:
99% zeker weten C#; afgaand op TS's vorige topics, het bestaan van een GroupBox die een CreateGraphics method heeft en 't gebruik van C# syntax.
Had een vermoeden, maar als de TS dit vermeld had moest de vraag niet gesteld worden ;)
Pagina: 1