Grafisch programma

Status
Niet open voor verdere reacties.

Cuelight

Gebruiker
Lid geworden
12 feb 2008
Berichten
8
Dag programmeurs

Voor een opdracht op school moet ik een programma schrijven in C#. Wat moet het programma doen:
Ik zou dus grafische objecten moeten plaatsen in het programma. Ik heb bijvoorbeeld 10 symbolen, ik klik op een button en dan kan ik het desbetreffende symbool slepen tot op de plaats waar ik het wil. Deze objecten moeten met elkaar verbonden kunnen worden door lijnen ertussen te tekenen. Als er een lijn tussen 2 objecten staat, moet het programma ook weten dat deze objecten met elkaar verbonden zijn om gegevens door te geven en berekeningen te maken.

Het is de bedoeling om een elektrische installatie weer te geven in een boomstructuur, en in deze boomstructuur worden stromen, kabeldiktes etc.. berekend.

Ik heb een beperkte C# kennis, en ben momenteel vol op zoek naar mogelijke manieren/oplossingen.
Heeft iemand meer info in welke richting ik moet zoeken, tips etc...?

Alvast bedankt!

Chris
 
Wat ik zou doen.
Een main grafical user interface (GUI) class
Op deze kunnen objecten gezet worden, daar maak je een aparte class van.
Dus dan heb je aan classes:

- GUI
- Object



Zou je dan op zo'n soort structuur komen?

structuuruw4.jpg


Of mag je maar van 1 parent (een bovenste) naar 1 child toe?
 
Van deze dingen heb ik nog niet gehoord, maar nu heb ik een richting waar te zoeken!


Ik moet volgende structuur behalen:


Alvast bedankt!
 
Ik denk dat je dan het beste zoals ik kan zien gebruik kan maken van een boomstructuur
Een uitleg erover: http://nl.wikipedia.org/wiki/Tree

Om het wat duidelijker te maken even wat commentaar bij jouw tekening gegeven:

[smallimg]http://img339.imageshack.us/img339/6542/boomstructuurmygs4.jpg[/smallimg]

Je bovenste stuk is de Basis van de boomstructuur.
Deze heeft een lijst met daarin 3 nodes.
Elk van die 3 nodes heeft ook weer een lijst met een bepaald aantal nodes.

In de nodes kan je dan 1 of meerdere methodes maken welke een berekening uitvoeren op de meegegeven waarde.
 
Laatst bewerkt:
Bedankt voor de reactie.

Er is toch al een deel van het programma werkende.
Ik kan nu kiezen uit een stuk of 5 componenten dmv buttons, het component verschijnt op het scherm en het kan versleept worden.

Nu wil ik dus aan elk nieuw component data meegeven, en dat wil ik via tabellen doen.
Ik ben er nog niet uit wat het gaat worden; SQL, XML of acces..

Groeten

Chris

Als iemand nieuwsgierig is naar het programma, wil ik het wel posten :)
 
Ik ben nu al 2 dagen volop aan het experimenteren met databases.
Op het net vind je hopen info, maar nergens een duidelijke en simpele stap voor stap tutorial.
Kan iemand mij wat op weg helpen,een goede link zou al heel veel doen :).Ik zou graag een verbinding maken met een Acces database of SQL.µ


Groeten
 
Momenteel plaats ik door een button gegenereerde pictureboxen.
Via de mouse events kan ik de pictureboxen verplaatsten.

Code:

Code:
private void btn_transfo_Click(object sender, EventArgs e)
        {
            teller_transfo += 1;
            PictureBox transfo = new PictureBox();
            Controls.Add(transfo);
            transfo.Name = "pic" + teller_transfo;
            transfo.Location = new Point(this.positie1.X + 900, this.positie1.Y+100);
            transfo.ClientSize = new Size(50, 50);
            transfo.SizeMode = PictureBoxSizeMode.StretchImage;
            transfo.MouseDown += new MouseEventHandler(transfo_MouseDown);
            transfo.MouseUp += new MouseEventHandler(transfo_MouseUp);
            transfo.MouseMove += new MouseEventHandler(transfo_Mousemove);
            transfo.MouseDoubleClick += new MouseEventHandler(picbox_MouseDoubleClick);
            


            try
            {
                transfo.Image = Image.FromFile(@"c:\pic\transfo.jpg");
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message, "Cannot find pic", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }

        void transfo_Mousemove(object sender, MouseEventArgs e)
        {
            PictureBox x = (PictureBox)sender;
            if (x.Tag != null && (bool)x.Tag)
            {
                Point current_pos = Control.MousePosition;
                x.Location = current_pos;

            }
        }

        void transfo_MouseUp(object sender, MouseEventArgs e)
        {
            ((Control)sender).Tag = false;
        }

        void transfo_MouseDown(object sender, MouseEventArgs e)
        {
            ((Control)sender).Tag = true;

        }

Dit is werkende. Nu zou ik het volgende willen doen, wanneer ik op de button transfo klik, wordt er een picturebox gegenereerd. In plaats dat deze rechtstreeks op een vaste positie komt te staan, zou ik willen dat de picture na het klikken direct aan mijn muis hangt zodat je hem direct kan droppen op de juiste plaats.

Ik heb al vanalles geprobeerd wat in de buurt komt, maar dan blijft de picturebox van mijn cursor weglopen:)

Iemand een idee?

Groeten
 
IK heb momenteel mijn drag & drop werkende gekregen met volgende code:

Code:
private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            PictureBox transfo = (PictureBox)e.Data.GetData(typeof(PictureBox));
            transfo.Location = this.PointToClient(new Point(e.X, e.Y));

       }

private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }


private void btn_transfo_MouseDown(object sender, MouseEventArgs e)
        {
            teller_transfo += 1;
            PictureBox transfo = new PictureBox();
            transfo.Name = "transfo" + teller_transfo;
            transfo.ClientSize = new Size(50, 50);
            transfo.SizeMode = PictureBoxSizeMode.StretchImage;
            try
            {
                transfo.Image = Image.FromFile(@"c:\pic\transfo.jpg");
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message, "Cannot find pic", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            transfo.MouseDown += new MouseEventHandler(transfo_MouseDown);
            transfo.MouseUp += new MouseEventHandler(transfo_MouseUp);
            transfo.MouseMove += new MouseEventHandler(transfo_MouseMove);
            transfo.MouseDoubleClick +=new MouseEventHandler(transfo_MouseDoubleClick);
            transfo.MouseClick += new MouseEventHandler(transfo_MouseRightClick);
            this.Controls.Add(transfo);
            this.DoDragDrop(transfo, DragDropEffects.Move);
}


void transfo_MouseMove(object sender, MouseEventArgs e)
        {
            PictureBox x = (PictureBox)sender;
            if(x.Tag != null && (bool)x.Tag)
            {
                Point positie = Control.MousePosition;
                x.Location = positie;
      }



 void transfo_MouseUp(object sender, MouseEventArgs e)
        {
            ((Control)sender).Tag = false;
        }

        void transfo_MouseDown(object sender, MouseEventArgs e)
        {
            ((Control)sender).Tag = true;
       }

Maar als ik een picbox versleep of een nieuwe drag & drop, staat de cursor links boven van de picturebox. Hoe zou ik deze in het midden kunnen krijgen?
Stel dat mijn picboxen 50 op 50 zijn, dan zou mijn nieuwe mouse positie (+25,-25) moeten zijn, maar dit nu nog vertalen naar juiste c code :)

Iemand een idee?
 
Momenteel sta ik al een hele stap verder; ik heb een drag en drop functie, en ik kan een grid maken met snap to grid functie om lijnen in te tekenen. Dit grid krijg ik enkel klaar in een panel of een picturebox.

Mijn drag en drop code werkt enkel in het gewoon form; als ik een picturebox plaats, om er andere pictureboxen in te slepen, blijven ze precies achter de eerste picturebox staan. Hoe is dit het best op te lossen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan