【问题标题】:Use of Unassigned Local Variable with Graphics.Drawing在 Graphics.Drawing 中使用未分配的局部变量
【发布时间】:2014-08-30 00:07:17
【问题描述】:

所以我正在尝试编写一个程序,该程序通过每 1 度绘制一条线来绘制一个圆,并通过 RGB 递增(由随机开始)来改变颜色。

这是我目前的代码

public static void drawCircle(int iRandR, int iRandG, int iRandB)
{
    for (int x = 0; x < 359; ++x)
    {
        double dXAngle = 0;
        double dYAngle = 0;
        dXAngle = 300 + Math.Cos(x) + 200;
        dYAngle = 300 + Math.Sin(x) + 200;
        Pen pPen = new Pen(Color.FromArgb(255, iRandR, iRandG, iRandB));
        Graphics gDraw;
        int iXAngle = Convert.ToInt32(dXAngle);
        int iYAngle = Convert.ToInt32(dYAngle);
        gDraw.DrawLine(pPen, 300, 300, iXAngle, iYAngle); //Error called here
    }

}
private void drawCircleButton_Click(object sender, EventArgs e)
{
    int genRandR = 0;
    int genRandG = 0;
    int genRandB = 0;
    Random rRand = new Random();
    genRandR = rRand.Next(0, 255);
    genRandG = rRand.Next(0, 255);
    genRandB = rRand.Next(0, 255);
    drawCircle(genRandR, genRandG, genRandB);
    drawCircleButton.Hide();
}

唯一的问题是编译器对上述行有问题,它抛出“使用未分配的局部变量'gDraw'”我做了一些谷歌搜索,很多其他例子看起来像我的,但我不知道为什么我的会抛出这个错误。

任何帮助将不胜感激。

【问题讨论】:

  • gDraw(具体来说是Graphics)是一个引用类型。它没有默认值。因此,需要初始化(可能使用new 关键字?)
  • 你在画什么? WinForms 控件? Bitmap?

标签: c# graphics compiler-errors drawing


【解决方案1】:

您需要从某处传递所需的Graphics instance 作为参数。正如 MSDN 上所解释的,Graphics 类封装了一个 GDI+ 绘图表面。它用于将各种绘图操作抽象到不同的显示设备(您的屏幕、位图、元文件甚至打印)。

public static void DrawCircle(Graphics gDraw, int iRandR, int iRandG, int iRandB)
{
    ...
}

您可能是从Paint 事件处理程序或类似的东西调用它,您可以访问要绘制到的Graphics 对象。即:

protected override void OnPaint(PaintEventArgs p)
{
     var graphics = p.Graphics;
     DrawCircle(graphics, ...);
}

【讨论】:

  • 我已经做了一百万次了,有些我忘记了...非常感谢!
  • 再看一遍,OnPaint 似乎自动运行而我没有调用它,奇怪。
  • @Cistoran: OnPaint 在即将绘制控件时在 GUI 线程上调用。具体来说,当它失效时,Windows 将向窗体发送一个绘制消息,该窗体将调用OnPaint 方法。您不需要(也不应该)调用它,您通常会覆盖它以将您自己的绘图逻辑放入其中。如果您不这样做,则会调用基本的Control.OnPaint 方法,并且您的控件(或UserControl,或Form)将获得其默认外观,然后触发Paint 事件。
猜你喜欢
  • 2015-09-25
  • 2013-10-18
  • 2015-11-09
  • 2012-05-18
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多