2017-01-26 6 views
2

パネルにpicturexoxがあり、pictureboxにdatagridviewがあるとします。コントロール内のすべてのアイテムをキャプチャする方法は?

は、私がパネルキャプチャするために、次のコードを使用します。

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

をしかし、その上のDataGridViewが欠落しているだけのPictureBoxが捕獲されたようです。

PictureboxをDataagridviewと一緒にキャプチャするにはどうすればよいですか?

+0

コントロールの階層を調べて、 'DataGridView'が実際に' Panel'内の子であるかどうかを確認してください。 –

+0

または 'dataGrid1.Parent.DrawToBitmap'とクロップ – Slai

答えて

2

DrawToBitmapメソッドは、Paintイベントとすべてのネストされたコントロールに描画されたグラフィックスをキャプチャします。見つからない場合は、間接的に直接ネストされません。これはおそらく起こった方法です:

​​とPictureBoxesのデザイナの振る舞いはとは異なり、です。 GroupBoxesTabPagesとさらにいくつかのような

​​は、のコンテナコントロールです。

これは、マウスでドラッグしたコントロールがのネストされたを取得することを意味します。

PictureBoxないコンテナは、のように、ButtonまたはLabelを言う..です

あなたDataGridViewPictureBoxあなたは

  • の選択がでそこに移動している中キーボード(!)
  • コード内にネストしています(ネストした場合DGV

    • :)

    は...それでDGV動くかどうかを確認するためにPictureBoxを移動することによって、

    アップデートをキーボード道の成功をテストしていますPictureBoxでは、それ自体がPanelにネストされていますが、すべてが順調で、結果はあなたの見た目と同じです。

  • ただし、巣Panelの両方のDGVPictureBoxを場合は、単にそれらが重なって聞かせて、奇妙なバグが表示されます。複数のオーバーラップのコントロールをで描かれ、here for a post及びこれについてのリンクを参照してください。コンテナ内部のdocumented

コントロールを逆の順序でレンダリングされている問題で、。

でも、明らかにバグです。

+0

あなたの答えをありがとう。私は「キーボードでそれを動かすのはどういう意味ですか?」とはどういう意味ですか? – camino

+0

dataGridView1.Parent = pictureBox1が見つかりました。しかし、dataGridView1.Parent = panel1;そうでない場合 – camino

+0

キーボードで移動するということは、マウスの代わりにカーソルキーを使用して選択したコントロールを移動すると、実際には非コンテナにコントロールがネストされます。 – TaW

関連する問題