[VB.NET] Grafisch object maken dat versleepbaar is

Pagina: 1
Acties:
  • 135 views sinds 30-01-2008
  • Reageer

  • Philip J. Dijkstra
  • Registratie: Februari 2000
  • Laatst online: 30-11 16:25
Heren,

Na 2 VB.NET boeken enGoogle te hebben geraadpleegd heb ik nog geen idee hoe ik het volgende moet doen:

Dynamisch een grafisch object maken en deze kunnen verslepen op een 'canvas'.

De gebruiker moet een tabel kunnen 'tekenen', deze plaatsen waar hij maar wil op een 'canvas' en nadat hij de 'properties' van het object heeft aangepast moet hij de veldnamen kunnen zien in het grafisch object.

Alle boeken en sites hebben prachtige verhaaltjes over een heleboel dingen en gewoon een figuur tekenen lukt me ook wel maar bovenstaande dus niet.

Het zou mij super helpen als iemand iig de functies kan noemen waarmee ik zoiets opzet.
Misschien heeft iemand eerder zoiets gedaan en kan de volgende vragen invullen in mijn opzet:

Maak het 'canvas' (tekengebied) op met %welke functie?%
Gebruiker klikt op de knop 'Table' en daarna op het 'canvas', een standaard lege tabel wordt grafisch weergegeven op de plaats waar de gebruiker klikte. De functie %geen idee% in de klasse 'MaakEenTabel' tekend de tabel.
Via de rechtermuisknop-klik op het tabel-object verschijnt een property scherm waar de gebruiker velden voor de tabel kan opgeven.
Na op de OK te hebben gedrukt wordt het grafische object zo bijgewerkt dat de veldnamen leesbaar in het grafisch object staan. De velden zijn selecteerbaar (highlight regel in tabel). Dit doet de functie %wist ik het maar% in de klasse 'MaakEenTabel'.
Door de linkermuisknop ingedrukt te houden terwijl een tabel geselecteerd is kan de tabel versleept worden op het 'canvas'. De functie %kijk ik zweef% houdt de tabel zichtbaar terwijl deze versleept wordt.

Ik weet prima hoe datastructuren e.d. in elkaar zitten maar heb nog nooit iets met zelfgetekende objecten gedaan. Help plz.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Volgens mij moet je gewoon een UserControl maken. In de usercontrol kun je eventueel het Paint event implementeren om zelf je control te tekenen.
Voor het slepen van de control kun je gewoon de Mouse Events afvangen en dan de positie van je User Control veranderen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • masterpoi
  • Registratie: Oktober 2004
  • Laatst online: 01-12 17:47
In plaats van een klasse MaakEenTabel zou je als volgt te werk kunnen gaan.

Maak een klasse Tabel met o.a. volgende eigenschappen (vul zelf aan waar nodig)

positie (x,y) klasse point
grootte (breedte en hoogte) klasse size
aantal kolommen, aantal rijen: integers
nummer geselecteerde rij: integer
array van strings van kolommen x rijen: tekst in de cellen

Voor zie dan volgende methodes:

Draw(met parameter een Graphics object)
deze methode tekent de tabel op het graphics object op positie x,y
Verplaats(int x, int y)
past de positie aan met x,y
int GeefRij(int x, int y)
kijk in welke rij de muis is adhv positie x,y
SelecteerRij(int rij)
selecteer de desbetreffende rij
bool IsMuisOverTabel(int x,int y)
Kijk of de muis in de tabel-rechthoek zit.


Koppel deze klasse aan een object dat een graphics object heeft, bvb een form, picturebox of een user control.
Bij elke nieuwe actie (bvb een klik op dat object of het paint-event) roep je de draw methode op

Gebruik dan zoals rwb zei de MouseDown, MouseMove en MouseUp events van het object om de methodes van de klasse tabel op te roepen

bvb een verplaats komt na een mousedown waar ismuisovertabel == true en een mousemove (met als parameters het verschil in de muispositie nu en de muispositie bij de mousedown)

[ Voor 5% gewijzigd door masterpoi op 26-04-2007 16:28 ]


  • Philip J. Dijkstra
  • Registratie: Februari 2000
  • Laatst online: 30-11 16:25
Super, heren.

Hiermee kan ik verder, bedankt!

  • CodeIT
  • Registratie: Juni 2002
  • Laatst online: 21:22

CodeIT

Code IT

Hier een codevoorbeeld: http://www.codeproject.com/csharp/articleone.asp
Het is wel in C#, maar dan heb je een id.