2015-10-21 5 views
0
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace painter 
{ 
public partial class Form1 : Form 
{   
    Array values = Enum.GetValues(typeof(Color)); 
    Random random = new Random(); 

    public bool shouldpaint = false; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_MouseDown(object sender, MouseEventArgs e) 
    { 
     shouldpaint = true; 
    } 

    private void Form1_MouseUp(object sender, MouseEventArgs e) 
    { 
     shouldpaint = false; 
    } 

    private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (shouldpaint == true) 
     { 
      Graphics a = CreateGraphics(); 

      Color randomColor = (Color)values.GetValue(random.Next(values.Length)); 

      a.FillEllipse(new SolidBrush(randomColor), e.X, e.Y, 5, 5); 
     } 
    } 
} 

}Как рандомизировать цветное перечисление в формах окон?

Я пытаюсь рандомизации SolidBrush (randomColor), так что, когда я двигаю мышь, его цвет будет меняться, и окрашены соответственно. Я пробовал код выше, он дал мне «Необработанное исключение типа« System.ArgumentException »произошло в mscorlib.dll». Можете ли вы проверить мой код рандомизации? Прежде чем я добавил этот код, он работал по назначению в соответствии с моим предопределенным цветом.

ответ

3

Если вам нужны случайные цвета, вы должны создать случайное число, в максимальное значение min, разрешенное цветовым перечислением.

Я думаю, что лучше забыть переименование цвета, вместо этого использовать старый конструктор RGB.

Dim oRandomNumbers As New Random 
Dim oColor as Color 
oColor =Color.FromArgb(255, _ 
     oRandomNumbers.Next(0, 256), _ 
     oRandomNumbers.Next(0, 256), _ 
     oRandomNumbers.Next(0, 256)) 

В C#:

Random oRandomNumbers = new Random(); 
Color oColor = default(Color); 
oColor = Color.FromArgb(255, oRandomNumbers.Next(0, 256), 
         oRandomNumbers.Next(0, 256), 
         oRandomNumbers.Next(0, 256)); 

Edit: Как говорит @Enigmativity, 256 его исключительный верхний предел, так что это даст вам случайные числа от 0 до 255

+0

Вопроса имеет C# флаг, а не VB ;-) – derape

+0

@derape спасибо за предупреждение. – Caveman

+1

Просто помните, что второй параметр 'Random.Next (int, int)' является ** исключительным максимумом **, означающим, что 'oRandomNumbers.Next (0, 255)' будет производить только значения от '0' до' 254' включительно. – Enigmativity

Смежные вопросы