public SolidBrush(Color color) { this.color = color; IntPtr brush = IntPtr.Zero; int num = SafeNativeMethods.Gdip.GdipCreateSolidFill(this.color.ToArgb(), out brush); if (num != 0) { throw SafeNativeMethods.Gdip.StatusException(num); } SetNativeBrushInternal(brush); if (color.IsSystemColor) { SystemColorTracker.Add(this); } } internal SolidBrush(Color color, bool immutable) : this(color) { this.immutable = immutable; } internal SolidBrush(IntPtr nativeBrush) { SetNativeBrushInternal(nativeBrush); }
时间: 2024-02-10 20:18:26 浏览: 124
这是 `SolidBrush` 类的源代码,它表示用于绘制纯色的画刷。在构造函数中,它会接受一个 `Color` 对象作为参数,并根据这个颜色创建一个实际的画刷对象。
具体来说,它会调用 `SafeNativeMethods.Gdip.GdipCreateSolidFill` 方法创建一个实际的画刷对象,并把这个对象的指针保存到 `brush` 变量中。如果创建画刷对象的过程中出现了错误,它会抛出一个异常。
然后,它会调用 `SetNativeBrushInternal` 方法把这个实际的画刷对象保存到 `SolidBrush` 对象中。如果这个颜色是系统颜色,它会把这个 `SolidBrush` 对象添加到 `SystemColorTracker` 中,以便于在系统颜色改变时更新画刷的颜色。
`SolidBrush` 类还有其他的构造函数和方法,可以用于创建和操作画刷对象。如果你需要了解更多关于这个类的信息,可以参考 .NET Framework 的文档。
相关问题
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e){ if (e.RowIndex == 0 && e.ColumnIndex == 0) { e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None; } else if (e.RowIndex == 0) { e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString() == dataGridView1[e.ColumnIndex - 1, e.RowIndex].Value.ToString()) { e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None; } } else if (e.ColumnIndex == 0) { e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None; if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString() == dataGridView1[e.ColumnIndex, e.RowIndex - 1].Value.ToString()) { e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None; } } else { if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString() == dataGridView1[e.ColumnIndex - 1, e.RowIndex].Value.ToString()) { e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None; } if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString() == dataGridView1[e.ColumnIndex, e.RowIndex - 1].Value.ToString()) { e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None; } }}上述代码举例说明,例如合并第二行的前两列
抱歉,这段代码是 DataGridView 控件的 CellPainting 事件处理程序。该事件会在绘制单元格时触发,可以通过该事件来自定义单元格的绘制方式。该代码的作用是为 DataGridView 控件的单元格设置高级边框样式。
如果您要合并第二行的前两列,可以在第二行的第二个单元格上绘制一个与第一个单元格合并的矩形,以达到合并单元格的效果。具体实现方式可以参考以下代码:
```
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == 1 && e.ColumnIndex == 1)
{
// 绘制与第一个单元格合并的矩形
e.Graphics.FillRectangle(new SolidBrush(dataGridView1.DefaultCellStyle.BackColor), e.CellBounds);
e.PaintContent(e.CellBounds);
e.Handled = true;
}
}
```
以上代码会在 DataGridView 控件的第二行第二列上绘制一个与第一列合并的矩形,从而实现合并单元格的效果。
在下边的代码中 如何释放myPicControl1.GetBitmap Bitmap myBmp = new Bitmap(filepath+ filetype_jpg); using (Graphics graphics = Graphics.FromImage(myBmp)) { Font font = new Font("Black", 80, FontStyle.Bold); System.Drawing.Brush brush = new SolidBrush(Color.FromArgb(128, Color.LightGray)); graphics.TranslateTransform(myBmp.Width / 2, myBmp.Height / 2); graphics.RotateTransform(330f); graphics.DrawString(watermark, font, brush, -2100, -100); //graphics.RotateTransform(135f); TabPage_JPG.Show(); } myPicControl1.GetBitmap = myBmp;
你可以在代码的结尾使用以下语句释放Bitmap对象:
```
myBmp.Dispose();
```
这将释放Bitmap对象占用的内存。当然,如果你使用的是using语句,程序会自动释放Bitmap对象,这样你就不需要手动释放它了。
```
using (Bitmap myBmp = new Bitmap(filepath+ filetype_jpg))
{
using (Graphics graphics = Graphics.FromImage(myBmp))
{
Font font = new Font("Black", 80, FontStyle.Bold);
System.Drawing.Brush brush = new SolidBrush(Color.FromArgb(128, Color.LightGray));
graphics.TranslateTransform(myBmp.Width / 2, myBmp.Height / 2);
graphics.RotateTransform(330f);
graphics.DrawString(watermark, font, brush, -2100, -100);
myPicControl1.GetBitmap = myBmp;
}
}
```
这样你就不需要手动释放Bitmap对象了。
阅读全文