0

我想要做什么
创建并填充一个矩形,最初使用灰色,然后按下按钮随机化该矩形的填充颜色。
我似乎无法
在最初绘制后修改上述矩形的属性。

随机颜色生成器

public static readonly Random random = new Random();
public static readonly object syncLock = new object();
public static int RandomNumber( int min, int max )
{
  lock(syncLock) {
    return random.Next(min, max);
  }
}
public Color randColourPicker() {
  Color randColour = Color.FromArgb(RandomNumber(0, 255), RandomNumber(0, 255), RandomNumber(0, 255));
  return randColour;
}

一些 randColourPicker() 电话

public void randomizeColours() {
    this.BackColor = randColourPicker();
    clrRandLabel.ForeColor = randColourPicker();
    randomizeButton.BackColor = randColourPicker();
    randomizeButton.ForeColor = randColourPicker();
    loopCheckbox.ForeColor = randColourPicker();
}

矩形画

private void clrRandForm_Paint( object sender, PaintEventArgs e ) {
    int x = 266;
    int y = 105;
    int width = 274;
    int height = 172;

    Rectangle clrRect = new Rectangle(x, y, width, height);
    SolidBrush greyBrush = new SolidBrush(Color.FromArgb(75, 75, 75));
    SolidBrush randBrush = new SolidBrush(randColourPicker());
    Graphics clrGraphic = mainBox.CreateGraphics();

    clrGraphic.FillEllipse(greyBrush, clrRect);

    greyBrush.Dispose();
    randBrush.Dispose();
    clrGraphic.Dispose();
}

更多信息
我有一个按钮,它的单击事件必然会执行randomizeColours()调用,这反过来会交换 UI 各种元素的颜色。我还有一个复选框,当检查时,它会randomizeColours()用计时器在循环中播放。我想做类似的事情,但填充颜色为clrRect,但我似乎无法弄清楚如何clrGraphic.FillRectangle(greyBrush, clrRect)在 PaintEvent 函数之外访问,所以我可以将其修改为clrGraphic.FillRectangle(randBrush, clrRect). randBrush是我使用随机颜色创建的画笔randColourPicker()

使用的程序
Microsoft Visual Studio Express 2012

PS
对不起,如果这个问题是重复的,我不知道要搜索什么......另外,对不起,如果我的代码对某些人来说是令人畏惧的,我对OOP方法或C-并不是那么好风格化的语言。:)

4

1 回答 1

0

要更改矩形颜色,您必须再次绘制它。您可以保留您的绘画事件功能,但需要进行一些更改。首先,声明一个全局布尔值 First_time(最初设置为 true),它将检查您是否想要 graybrush 或 Randbrush。

boolean First_Time;

然后在您的 Paint 事件中:

private void clrRandForm_Paint( object sender, PaintEventArgs e ) {
    int x = 266;
    int y = 105;
    int width = 274;
    int height = 172;

    Rectangle clrRect = new Rectangle(x, y, width, height);
    SolidBrush greyBrush = new SolidBrush(Color.FromArgb(75, 75, 75));
    SolidBrush randBrush = new SolidBrush(randColourPicker());
    Graphics clrGraphic = mainBox.CreateGraphics();

    if(First_time)
        clrGraphic.FillEllipse(greyBrush, clrRect);
    else
        clrGraphic.FillEllipse(randBrush, clrRect);
    First_Time = false;

    greyBrush.Dispose();
    randBrush.Dispose();
    clrGraphic.Dispose();
}

然后在您的按钮事件中,调用:

this.Invalidate(); // or this.Refresh()

以便再次调用 Paint 事件 xD。我希望我的建议是有用的。

于 2014-06-28T08:08:31.113 回答