2012-10-09 2 views
0

Я разместил пользовательский элемент управления в datagridview, скажем, CustomControl (сторонний элемент управления), а ячейка рисует только при входе в режим редактирования. Если режим редактирования выхода не отображается, я переопределяю метод рисования (см. Ниже). Он работает нормально в Windows 7, но не в Windows XP. Ошибка DrawToBitmap. Есть идеи?DrawToBitmap не работает на windows xp, но в Windows 7

 protected override void Paint(
     Graphics graphics, 
     Rectangle clipBounds, 
     Rectangle cellBounds, 
     int rowIndex, 
     DataGridViewElementStates cellState, 
     object value, 
     object formattedValue, 
     string errorText, 
     DataGridViewCellStyle cellStyle, 
     DataGridViewAdvancedBorderStyle advancedBorderStyle, 
     DataGridViewPaintParts paintParts)   {    // Call the base class method to paint the default​ cell appearance. 
     base.Paint(
      graphics, 
      clipBounds, 
      cellBounds, 
      rowIndex, 
      cellState, 
      value, 
      formattedValue, 
      errorText, 
      cellStyle, 
      advancedBorderStyle, 
      paintParts); 

     CustomControl customControl= (CustomControl)this.DataGridView.Rows[rowIndex].Cells[this.ColumnIndex].Value; 

     Bitmap img = new Bitmap(cellBounds.Width, cellBounds.Height); 

     // Resize propertyEditor control to cell bounds 
     propertyEditor.Height = cellBounds.Hei​ght; 
     propertyEditor.Width = cellBounds.Widt​h; 

     // Sets the cell's backcolor according to the data​ grid view's color 
     customControl.BackColor = this.DataGridView.Rows[rowIndex].Cells[this.ColumnIndex].Style.BackColor; 

     // Finally paint the propertyEditor control  ​  
     customControl.DrawToBitmap(img, new Rectangle(0, 0, customControl.Width, customControl.Height​)); 
     graphics.DrawImage(img, cellBounds.Loc​ation); 
    } 

ответ

1

Я был в состоянии воспроизвести действительно подобную проблему с Windows 7, удалив строку Application.EnableVisualStyles() из моего Program.cs. Я использовал простой ComboBox, а не что-то третье лицо, но эффект был тот же. Чтобы преодолеть этот вопрос, я должен был сделать три вещи:

  1. Установите (под заказ) управления видимыми верно, так что DrawToBitmap, безусловно, будет в состоянии сделать его
  2. Установить родительский элемент управления к DataGridView (например customControl.Parent = DataGridView) так что он имеет родителя, который также виден
  3. Переместите регулятор из видимой области (например, customControl.Location = new Point(0, -(customControl.Height)) поэтому управление не отображается, где он не

должен Это сработало в моем случае, но это может зависят от h Ваш пользовательский элемент управления обрабатывает функцию DrawToBitmap.

Мне любопытно, если это поможет в вашем случае или может найти более элегантное решение.

Смежные вопросы