2016-08-01 13 views
0

DataGridViews行をビットマップとして取得して、カーソルアイコンとして使用しようとしています。 悲しいことに、DataGridViewRowオブジェクトにはDrawToBitmapメソッドがありません。カーソルアイコンのビットマップとしてDataGridView行を取得する方法は?

私は行(RowRect)の境界を取得し、DataGridView(bmp)全体のビットマップを取得することができました。次にビットマップから行を切り取る必要があると思いますが、どうやってそれを行うのか分かりません。ここで

は私の開始コードです:

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (dataGridView1.SelectedRows.Count == 1) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      rw = dataGridView1.SelectedRows[0]; 
      Rectangle RowRect = dataGridView1.GetRowDisplayRectangle(rw.Index, true); 
      Bitmap bmp = new Bitmap(RowRect.Width, RowRect.Height); 
      dataGridView1.DrawToBitmap(bmp, new Rectangle(Point.Empty, bmp.Size)); 
      Cursor cur = new Cursor(bmp.GetHicon()); 
      Cursor.Current = cur; 
      rowIndexFromMouseDown = dataGridView1.SelectedRows[0].Index; 
      dataGridView1.DoDragDrop(rw, DragDropEffects.Move); 
     } 
    } 
} 

答えて

0

あなたが最初全体 clientareaコンテンツを(!あなたのビットマップが小さすぎる)取得する必要があり、その行矩形を切り出します。また、作成したリソースのをに処分してください!

これは動作するはずです:

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) 
{ 

    if (dataGridView1.SelectedRows.Count == 1) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      Size dgvSz = dataGridView1.ClientSize; 
      int rw = dataGridView1.SelectedRows[0].Index; 
      Rectangle RowRect = dataGridView1.GetRowDisplayRectangle(rw, true); 
      using (Bitmap bmpDgv = new Bitmap(dgvSz.Width, dgvSz.Height)) 
      using (Bitmap bmpRow = new Bitmap(RowRect.Width, RowRect.Height)) 
      { 
       dataGridView1.DrawToBitmap(bmpDgv , new Rectangle(Point.Empty, dgvSz)); 
       using (Graphics G = Graphics.FromImage(bmpRow)) 
        G.DrawImage(bmpDgv , new Rectangle(Point.Empty, 
           RowRect.Size), RowRect, GraphicsUnit.Pixel); 
       Cursor.Current.Dispose(); // not quite sure if this is needed 
       Cursor cur = new Cursor(bmpRow .GetHicon()); 
       Cursor.Current = cur; 
       rowIndexFromMouseDown = dataGridView1.SelectedRows[0].Index; 
       dataGridView1.DoDragDrop(rw, DragDropEffects.Move); 
      } 
     } 
    } 
} 
関連する問題