2017-01-26 2 views
2

Angenommen, es gibt eine PictureXox auf dem Panel und es gibt eine Datagridview auf der Picturebox.Wie erfassen Sie alle Elemente in einem Steuerelement?

Ich verwende den folgenden Code, um die Platte zu erfassen:

System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(panel1.ClientRectangle.Width, panel1.ClientRectangle.Height); 
panel1.DrawToBitmap(bmp, panel1.ClientRectangle); 
bmp.Save(@"test.jpg"); 

Aber es scheint, dass nur die picturebox erfasst wurde, wird der Datagridview auf ihm fehlt.

Wie kann die Picturebox zusammen mit dem Datagridview erfasst werden?

+0

Überprüfen Sie die Steuerungshierarchie, um festzustellen, ob das 'DataGridView' tatsächlich ein untergeordnetes Element innerhalb des' Bereichs' ist. –

+0

oder 'dataGrid1.Parent.DrawToBitmap' und crop – Slai

Antwort

2

Die Methode DrawToBitmap erfasst die Grafiken, die im Paint-Ereignis und allen verschachtelten Steuerelementen gezeichnet wurden. Wenn eines fehlt, ist es weder direkt noch indirekt verschachtelt. Hier ist, wie dies wohl passiert:

Der Designer Verhalten von Panels und PictureBoxes ist verschiedene.

Panels, wie GroupBoxes, TabPages und ein paar mehr sind Containersteuer.

Dies bedeutet, dass jede Kontrolle, die Sie auf sie mit Ihrem Maus ziehenverschachtelte in ihnen bekommt.

PictureBox ist kein Container, wie, sagen wir ein Button oder ein Label ..

Um Nest Ihre DataGridView in der PictureBox Sie haben eine Auswahl von

  • mit ihm dorthin zu ziehen die Tastatur (!)
  • Schachteln in Code (yourPBox1.Parent = yourPanel;)

Sie den Erfolg der Tastatur Art und Weise testen, indem Sie die PictureBox bewegen, um zu sehen, ob die DGV bewegt sich mit ihm ..

Update:

  • Wenn Sie nisten die DGV in der PictureBox, die selbst in der Panel verschachtelt ist, wird alles gut und das Ergebnis wird genau wie das, was Sie sehen.

  • Wenn Sie jedoch Nest beideDGV und PictureBox im Panel und nur lassen sie sich überlappen, ein seltsamer Fehler angezeigt: Mehrere überlappende Kontrollen in Reverse gezogen werden, siehe here for a post und ein Link zu diesem Ausgabe, die documented

Controls ist im Inneren von Behältern in umgekehrter Reihenfolge wiedergegeben werden.

aber offensichtlich immer noch ein Fehler.

+0

Danke für Ihre Antwort. Ich frage mich, was bedeutet "es dort mit der Tastatur (!)" Zu bewegen? – camino

+0

Ich fand dataGridView1.Parent = BildBox1; wird funktionieren, aber dataGridView1.Parent = panel1; nicht – camino

+0

Bewegen mit der Tastatur bedeutet nur, dass: mit den Cursortasten (anstelle der Maus) das ausgewählte Steuerelement in der Tat ein Steuerelement in einem Nicht-Container verschachteln wird. – TaW

Verwandte Themen