Announcement

Collapse
No announcement yet.

Rechteck an Mausposition

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rechteck an Mausposition

    Hallo zusammen!

    Ich habe ein eigenes Control, bei dem Punkte, per Mausklick, in ein Koordinatensystem eingetragen werden sollen.

    Das Koordinatensystem ist im Prinzip nur ein Panel mit Linien, dieses ist in einer abgeleiteten GroupBox enthalten.

    Die Mauskoordinaten bekomme ich so:

    [highlight=c#] private void curveGrid_MouseClick(object sender, MouseEventArgs e)
    {
    p.X = e.Location.X;
    p.Y = e.Location.Y;
    }[/highlight]

    Die koordinaten werden dann in einer Klassenweiten Variablen Point p gespeichert. Wenn ich in der _MouseClick Methode eine neue Form anzeigen lasse mit den Koordinaten im Text, dann stimmen diese.

    Mein Problem ist jetzt einen Punkt in das Koordinatensystem zu bekommen.
    Ich habe bisher z.CreateGraphics() aufrufen lassen um mit z.FillRectangle()
    ein Rechteck mit den Koordinaten zeichnen zu lassen. Nur bekomme ich das Rechteck nicht an den ermittelden Koordinaten sondern am Nullpunkt angezeigt. z.FillRectangle() habe ich im versucht im _Paint Ereignis des Panels und im _Click Ereignis des Panels.
    Zuletzt editiert von brown78; 09.04.2011, 16:15.

  • #2
    Vermutlich hast du das Zeichnen im Paint Event versucht? Das wird einmal am Anfang aufgerufen da hast du noch nie in das Panel geklickt und P steht noch an den Koordinaten 0,0. Du mußt vom Mouse_Click aus schon ein neuzeichnen explizit auslösen das der Paint Event auch wieder ausgeführt wird. Paint Event ausführen heißt übrigens alles neuzeichnen heißt du wirst wenn du dir nur einen Point merkst immer auch nur diesen einen zeichnen und sehen können. Du mußt dir schon dir gesamte Serie merken.

    Beispiel:

    [Highlight=C#]private List<Point> points = new List<Point>();

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
    foreach (Point point in points)
    e.Graphics.FillRectangle(new SolidBrush(Color.Black), new Rectangle(point, new Size(3, 3)));
    // Rectangle noch sinnvoll verschieben da linke obere Ecke im Moment denn Klickkoordinaten entspricht.
    }

    private void panel1_MouseClick(object sender, MouseEventArgs e)
    {
    points.Add(e.Location);
    panel1.Refresh();
    }[/Highlight]

    Comment


    • #3
      Ja super, mit e.Graphics.... funktioniert das auch... Danke soweit.

      Comment

      Working...
      X