Frage

Kann ich das alte Rechteck, das ich gezeichnet habe, löschen und ein neues Rechteck zeichnen?

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
        Graphics g = this.panel1.CreateGraphics();
        Pen pen = new Pen(Color.Black, 2);

        g.DrawRectangle(pen, 100,100, 100, 200);
        g.dispose();
}

Keine korrekte Lösung

Andere Tipps

Ich denke, ein Ereignisempfänger mit einem auf Ihre Aufgabenliste angeschlossenen itendrendierten Handler ist der Weg, um zu gehen.

Hier ist ein Link aufDie MSDN, die Sie beginnen wird, wenn Sie auf Event-Empfängern neu sind.

Dies geschieht normalerweise durch die Aufrechterhaltung einer Sammlung von Objekten, die Sie gezeichnet haben möchten. Der Mausklick sollte diese Sammlung aktualisieren und dann das Fenster (oder den Affektregion) aktualisieren. Dies hat den enormen Vorteil, das zu erhalten, was Sie gezeichnet haben, wenn das Fenster außerhalb des Bildschirms bewegt, hinter anderen Fenstern versteckt, minimiert usw. versteckt ist.

Erstellen Sie für eine rudimentäre Lösung eine Hierarchie von zeichnbaren Formtypen, die aus einer gemeinsamen abstrakten Formklasse stammen, und verwenden Sie, z. B. eine Liste für die Sammlung. Die Basisformklasse hat eine abstrakte Ziehmethode, die die abgeleiteten Klassen überschreiben.

Für eine mehr industriellere Lösung finden Sie nach 2-D-Szenengrafiken.

Man kann gebrauchen Graphics.Save() und Graphics.Restore(state) Methoden dafür. Zum Beispiel:

private void SaveRestore2(PaintEventArgs e)
{
    // Translate transformation matrix.
    e.Graphics.TranslateTransform(100, 0);

    // Save translated graphics state.
    GraphicsState transState = e.Graphics.Save();

    // Reset transformation matrix to identity and fill rectangle.
    e.Graphics.ResetTransform();
    e.Graphics.FillRectangle(new SolidBrush(Color.Red), 0, 0, 100, 100);

    // Restore graphics state to translated state and fill second

    // rectangle.
    e.Graphics.Restore(transState);
    e.Graphics.FillRectangle(new SolidBrush(Color.Blue), 0, 0, 100, 100);
}

http://msdn.microsoft.com/en-us/library/system.drawing.graphics.restore.aspx

Ich habe das tagelang gekämpft.Es gibt ein Limit von 70 Feldern in einem benutzerdefinierten Bearbeitungsformular, und dies enthält Anhang, modifiziert, modifiziert von, erstellt, erstellt von.Ich bin in SP2010, aber das Problem ist auch 2013. Referenz Das Buch SharePoint Designer 2010 entfesselt von Hughes, P1329.

Sie können dies durch das Bearbeiten von Formular in InfoPath umgehen, wenn Sie die SharePoint-Lizenzierung von Unternehmen haben.Wenn Sie nicht fehlschlagen, ob Sie die Anzahl der Formularfelder irgendwie verringern können.In unserem Fall gibt es beispielsweise einige Informationen, die an der Kreation der Artikel eingegeben werden, aber danach nicht geändert werden sollten, sodass wir es nicht auf dem Bearbeitungsformular benötigen.Wir können es noch auf dem Anzeigeformular haben.

Eine andere Option besteht möglicherweise darin, mehrere Bearbeitungsformulare für Benutzer zu haben, die unterschiedliche Rollen haben und daher nicht jedes Feld auf einmal sehen müssen.

hoffe das hilft.

Anstatt G.Drawrectangle zu nennen (Stift, 100.100, 100, 200); Verwalten Sie das Rechteck als Objekt, das vom Grafikobjekt gezeichnet wird. Jedes Mal, wenn Sie dieses Rechteckobjekt mit einem neuen und Grafikobjekt aktualisieren, zeichnet das neue.

Die Aktualisierung sollte das alte Rechteck löschen, und die Grafik zeichnet das neue.

Sie können einfach VisualBasic PowerPacks verwenden, es ist in meiner Version von Visual Studio 2008 enthalten

Hier ist ein Beispielcode, der ein Rechteck über eine TextBox zeichnet, d. h.Ich gebe ihm einen benutzerdefinierten Rand

    Dim x = TextBox1.Location.X
    Dim y = TextBox1.Location.Y
    Dim width = TextBox1.Width
    Dim height = TextBox1.Height
    Dim ShapeContainer1 As New Microsoft.VisualBasic.PowerPacks.ShapeContainer
    Me.Controls.Add(ShapeContainer1)
    Dim RectangleShape1 As New Microsoft.VisualBasic.PowerPacks.RectangleShape
    ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {RectangleShape1})
    RectangleShape1.Location = New System.Drawing.Point(x - 1, y - 1)
    RectangleShape1.Size = New System.Drawing.Size(width + 1, height + 1)
    RectangleShape1.BorderColor = Color.MistyRose
    ShapeContainer1.Refresh()

Der Code beschreibt sich selbst, aber wenn Sie ein Problem haben, hinterlassen Sie einfach eine Nachricht ...

Ich denke, ich benutze Drawreversibleframe ist die richtige Lösung. Der erste Anruf zeichnet das Rechteck, der zweite Anruf und wirkt es und so weiter.

Hier ist ein Beispielcode, ein Clic auf der Taste lässt das Rechteck erscheinen/enttäuschen.

Rectangle pRect = new Rectangle(10, 10, 20, 20);
private void rect_Click(object sender, EventArgs e)
{
  ControlPaint.DrawReversibleFrame(pRect, this.BackColor, FrameStyle.Thick);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top