2016-07-19 28 views
2

Ich bin sehr neu in C#, aber versuchen zu lernen, also ertragen Sie mit mir, wenn meine Syntax nicht korrekt ist. Ich bin in der Lage, eine Bildbox mit einer Schaltfläche zu erstellen und es erscheint auf dem Bildschirm. Ich kann es dann mit einer Mouse-Down-/Mouse-Move-Funktion gut über den Bildschirm bewegen. Ich drücke dann den Knopf, um eine weitere Picturebox zu erstellen, die erstellt werden kann, und kann diese auch verschieben, aber wenn ich versuche, die erste Picture Box zu bewegen, bewegt sich die zweite stattdessen und wird wahnsinnig. Gibt es eine Möglichkeit, die Kästchen der Instanziierung zu referenzieren oder zu markieren, so dass ich, wenn ich auf eines von ihnen klicke, sie um den Bildschirm bewegen kann?Referenzieren mehrerer instanziierter PictureBoxen

public partial class Form1 : Form 
{ 
    Point MP; 
    private static Control PB;   

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int picSizeX = Properties.Resources.police.Width/3; 
     int picSizeY = Properties.Resources.police.Height/3; 

     PictureBox pb = new PictureBox(); 
     pb.Location = new Point(100, 100); 
     pb.Size = new Size(picSizeX, picSizeY); 
     pb.Image = new Bitmap(Properties.Resources.police); 
     pb.SizeMode = PictureBoxSizeMode.StretchImage; 
     Controls.Add(pb); 
     pb.Tag = "veh"; 
     PB = pb; 

     pb.MouseDown += Pb_MouseDown; 
     pb.MouseMove += Pb_MouseMove; 
     pb.MouseHover += Pb_MouseHover; 
    } 

    private void Pb_MouseHover(object sender, EventArgs e) 
    { 
     PB.MouseHover += PB_MouseHover; 
    } 

    private void PB_MouseHover(object sender, EventArgs e) 
    { 

    } 

    private void Pb_MouseDown(object sender, MouseEventArgs e) 
    { 
     MP = e.Location; 
    } 

    private void Pb_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      PB.Left = e.X + PB.Left - MP.X; 
      PB.Top = e.Y + PB.Top - MP.Y; 
     } 
    } 
} 
+0

Ich glaube, ich habe den Code in einer Bearbeitung veröffentlicht, als Sie dies geschrieben haben. Es tut uns leid. – Rob

+0

Warum hast du 'static' Control auf Klassenebene gehalten? – Hassan

+0

das ist Müll, der dort gelassen wurde, als ich versuchte, es herauszufinden. Ich dachte, ich hätte es vor dem Posten gelöscht. – Rob

Antwort

3

Eigentlich ist es nicht notwendig, Kontrolle auf Klassenebene zu haben.

In der Ereignismethode gibt es einen Parameter mit dem Namen object sender, der einen Verweis auf das Steuerelement/Objekt enthält, das das Ereignis ausgelöst hat

Point MP; 
//private Control PB; //commented out as it is not required 

public Form1() 
{ 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    int picSizeX = Properties.Resources.police.Width/3; 
    int picSizeY = Properties.Resources.police.Height/3; 

    PictureBox pb = new PictureBox(); 
    pb.Location = new Point(100, 100); 
    pb.Size = new Size(picSizeX, picSizeY); 
    pb.Image = new Bitmap(Properties.Resources.police); 
    pb.SizeMode = PictureBoxSizeMode.StretchImage; 
    Controls.Add(pb); 
    pb.Tag = "veh"; 
    //PB = pb; 

    pb.MouseDown += Pb_MouseDown; 
    pb.MouseMove += Pb_MouseMove; 
    pb.MouseHover += Pb_MouseHover; 
} 

private void Pb_MouseHover(object sender, EventArgs e) 
{ 
    Control pbObj = sender as PictureBox; //sender refers to control that raised the event 
    pbObj.MouseHover += PB_MouseHover; 
} 

private void PB_MouseHover(object sender, EventArgs e) 
{ 

} 

private void Pb_MouseDown(object sender, MouseEventArgs e) 
{ 
    MP = e.Location; 
} 

private void Pb_MouseMove(object sender, MouseEventArgs e) 
{ 
    Control pbObj = sender as PictureBox; //sender refers to control that raised the event 

    if (e.Button == MouseButtons.Left) 
    { 
     pbObj.Left = e.X + pbObj.Left - MP.X; 
     pbObj.Top = e.Y + pbObj.Top - MP.Y; 
    } 
} 
+1

Ich könnte dich küssen. Das ist genau die Antwort, nach der ich so lange gesucht habe. Ich habe etwas mehr zu tun, um es zu verstehen, aber es funktioniert und ich bin glücklich. Vielen Dank. – Rob