Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 27.01.13 02:33 
planer

bisher kann ich werkzeuge (pictureboxen) die mir rechts als eine art werkzeugleiste zur verfügung stehen,
über eine andere picturebox (in der sich z.b. ein grundriss befindet) schieben und damit z.b. ein gebäude einrichten.

wie kann ich nun folgendes realisieren?
---------------------------------------
ich möchte nicht die original werkzeuge verschieben,
sondern bei MouseDown eine kopie erzeugen und diese dann auf den plan ziehen.

in einigen labels soll angezeigt werden wieviele werkzeuge schon auf dem plan sind
(quasi wieviele kopien von welcher sorte vorhanden sind)

mit rechtsklick auf ein werkzeug möchte ich dieses wieder löschen können.

----- nachtrag ------
das verschieben mache ich aktuell so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
private bool moving;
private Point startLocation;
private Control startpb;

private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
    moving = true;
    startpb = (Control)sender;
    startLocation = e.Location;
}

private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
    moving = false;
}

private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
    if (moving)
    {
        startpb.Left += e.Location.X - startLocation.X;
        startpb.Top += e.Location.Y - startLocation.Y;
    }
}

ich hoffe ihr habt zu meinen fragen einige tips.

gruß,
avoid
Einloggen, um Attachments anzusehen!
_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 27.01.13 04:59 
ich hab jetzt mal etwas rum probiert und folgendes funktioniert schon halbwegs.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
    startpb = (Control)sender;
    PictureBox box = new PictureBox();
    box.BackgroundImage = startpb.BackgroundImage;
    box.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
    box.Left = startpb.Left;
    box.Top = startpb.Top;
    box.Name = "new_" + startpb.Name;
    box.Size = startpb.Size;
    box.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
    box.TabIndex = lasttabindex + 1;
    box.TabStop = false;
    box.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDown2);
    box.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseMove);
    box.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseUp);
    Controls.Add(box);

    moving = true;
    startLocation = e.Location;
}

private void pictureBox_MouseDown2(object sender, MouseEventArgs e)
{
    startpb = (Control)sender;
    moving = true;
    startLocation = e.Location;
}

so erzeuge ich eine kopie wenn ich auf ein original klicke,
leider verschiebe ich dann damit nicht die kopie sondern das original.
wenn ich dann beim zweiten klick die kopie verschiebe klappt das.
scheind wohl irgendwo noch was falsch zu sein.
und noch ein unpraktischer nebeneffekt ist die tatsache das die kopien
sich nur hinter die grundriss zeichnung verschieben lassen und nicht darüber.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 27.01.13 15:16 
nun habe ich raus gefunden das ich mit folgendem code die kopie in den vordergrund bringen kann.
ausblenden C#-Quelltext
1:
box.BringToFront();					

ich habe zudem gelesen das man die sub_pictureboxen der main_picturebox als Parent zuordnen soll.
das habe ich jetzt mit folgendem code gemacht doch was bringt mir das?
ausblenden C#-Quelltext
1:
box.Parent.Name = "pictureBox_Hintergrund";					

den fehler, warum nach dem erstellen der kopie nicht die kopie sondern die original picturebox
verschoben wird, habe ich noch nicht gefunden.

---- nachtrag ----

für das löschen einer kopie habe ich jetzt diesen code erstellt, das scheind soweit zu klappen.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private void pictureBox_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        Controls.Remove((Control)sender);
    }
}

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 27.01.13 18:20 
so das ist des rätsels lösung.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
    startpb = (Control)sender;
    if (startpb.Name.Contains("new_"))
    {
        moving = true;
        startLocation = e.Location;
    }
}

private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
    if (moving)
    {
        startpb.Left += e.Location.X - startLocation.X;
        startpb.Top += e.Location.Y - startLocation.Y;
    }
}

private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
    moving = false;
}

private void pictureBox_MouseClickL(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left) // erstelle picturebox
    {
        startpb = (Control)sender;
        PictureBox box = new PictureBox();
        box.BackgroundImage = startpb.BackgroundImage;
        box.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
        box.Left = pictureBox_Hintergrund.Width / 2;
        box.Top = pictureBox_Hintergrund.Height / 2;
        box.Name = "new_" + startpb.Name;
        box.Size = startpb.Size;
        box.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
        box.TabIndex = lasttabindex + 1;
        box.TabStop = false;
        box.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDown);
        box.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseMove);
        box.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseUp);
        box.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseClickR);
        Controls.Add(box);
        box.Parent.Name = "pictureBox_Hintergrund";
        box.BringToFront();
    }
}

private void pictureBox_MouseClickR(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right) // lösche picturebox
    {
        Controls.Remove((Control)sender);
    }
}


ich hoffe es hilft dem einen oder anderen mit dem selben problem,
das dieser nicht tage damit verbringen muß codeschnippsel zu suchen, wie ich.

gruß,
avoid

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke