C# winform panel 画笔初始化问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform panel 画笔初始化问题相关的知识,希望对你有一定的参考价值。

如何在窗体初始化的时候就能加载panel 中的画笔进行画图,不要通过paint.
下面的是我的代码,这样加载完不能画出图。希望大神帮忙看下,谢谢了
public Form1()

InitializeComponent();
this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.Controls.Add(MainPanel);
init();



private void button7_Click(object sender, EventArgs e)

init();


private void init()

Graphics gra = this.MainPanel.CreateGraphics();
Pen myPen = Pens.Black;
int x, y;
for (int i = 1; i < 33; i++)
for (int j = 1; j < 15; j++)

x = i * 50;
y = j * 50;
gra.DrawRectangle(myPen, new Rectangle(x, y, 40, 35));
if (j % 2 == 1)
gra.FillRectangle(Brushes.LightBlue, new Rectangle(x, y, 40, 35));
else
gra.FillRectangle(Brushes.LightPink, new Rectangle(x, y, 40, 35));

load的时候窗体还没出现,所以不能画图 参考技术A 最后面加上gra.Dispose();

c# GDI和winforms中的径向渐变画笔效果

【中文标题】c# GDI和winforms中的径向渐变画笔效果【英文标题】:c# radial gradient brush effect in GDI and winforms 【发布时间】:2011-03-31 23:52:46 【问题描述】:

我创建了一个 c# windows 应用程序并编写了 75% 的代码。该程序允许用户创建流程图,并根据其状态对流程图形状进行着色。我希望它们变成 3d 按钮,例如来自网站 Webdesign.org 的

我不想为每个按钮创建一个 PNG,而是想在 C# 中使用画笔或其他技术创建它们,例如:

// Create solid brush.
SolidBrush blueBrush = new SolidBrush(Color.Blue);
// Create points that define polygon.
PointF point1 = new PointF(50.0F, 50.0F);
PointF point2 = new PointF(100.0F, 25.0F);
PointF point3 = new PointF(200.0F, 5.0F);
PointF point4 = new PointF(250.0F, 50.0F);
PointF point5 = new PointF(300.0F, 100.0F);
PointF point6 = new PointF(350.0F, 200.0F);
PointF point7 = new PointF(250.0F, 250.0F);
PointF[] curvePoints = point1, point2, point3, point4, point5, point6, point7;
// Define fill mode.
FillMode newFillMode = FillMode.Winding;
// Fill polygon to screen.
e.Graphics.FillPolygon(blueBrush, curvePoints, newFillMode);

我知道 WPF 有径向渐变,但我可以在 CGI 中做一些类似的事情吗?

【问题讨论】:

我假设您的意思是“GDI+”而不是“CGI”? 【参考方案1】:

与WPF 不同,GDI+/WinForms 没有RadialGradientBrush。但是,您可以使用PathGradientBrush 实现相同的效果。

这是一个例子:

Rectangle bounds = ...;
using (var ellipsePath = new GraphicsPath())

    ellipsePath.AddEllipse(bounds);
    using (var brush = new PathGradientBrush(ellipsePath))
    
        brush.CenterPoint = new PointF(bounds.Width/2f, bounds.Height/2f);
        brush.CenterColor = Color.White;
        brush.SurroundColors = new[]  Color.Red ;
        brush.FocusScales = new PointF(0, 0);

        e.Graphics.FillRectangle(brush, bounds);
    

PathGradientBrush 有很多属性可供试验,以确保获得所需的效果。

【讨论】:

虽然有很大的不同。 WF 的PathGradientBrush 不会在路径外绘制。 WPF 的RadialGradientBrush 可以。因此,根据您的要求,到目前为止可能无法达到相同的效果。【参考方案2】:

看看这个Codeproject article,然后看看路径渐变。

【讨论】:

谢谢,我会试试这个

以上是关于C# winform panel 画笔初始化问题的主要内容,如果未能解决你的问题,请参考以下文章

winform 窗体加载的问题,C#里不同Panel中窗体的调用

winform 窗体加载的问题,C#里不同Panel中窗体的调用

c# winform panel 边框样式设置

C#的winform. 有自动隐藏的控件吗?鼠标移过去再展开的

C#把winform中的Panel控件部分全屏

c#:winform的panel控件,我设计时把panel2覆盖在panel1。触发后可显示panel1,但触发panel2时没法显示?