0

我在 datagridview 中托管了一个自定义控件,比如说 CustomControl(第三方控件),并且只有在进入编辑模式时才会绘制单元格。如果退出编辑模式,它是不可见的,所以我已经覆盖了绘制方法(见下文)。它在 windows 7 中可以正常工作,但在 windows xp 中却不行。DrawToBitmap 失败。有任何想法吗?

        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);
    }
4

1 回答 1

1

通过Application.EnableVisualStyles()从我的Program.cs. 我使用的不是第三方的简单组合框,但效果是一样的。为了克服这个问题,我必须做三件事:

  1. 将(自定义)控件设置为可见 true 以便DrawToBitmap肯定能够呈现它
  2. 将控件的父级设置为DataGridView(例如customControl.Parent = DataGridView),以便它有一个也可见的父级
  3. 将控件移出可见区域(例如customControl.Location = new Point(0, -(customControl.Height)),控件不会出现在不应该出现的地方

这在我的情况下有效,但它可能取决于您的自定义控件如何处理该DrawToBitmap功能。

我很好奇这是否会对您的情况有所帮助,或者是否有人可以找到更优雅的解决方案。

于 2012-10-25T17:47:23.770 回答