2014-01-13 3 views
2

Как я мог преобразовать ConsoleColor в тип Color?Преобразование цвета консоли в цвет?

мне это нужно для создания перегрузки этого метода, который должен возвращать цвет вместо в Consolecolor:

''' <summary> 
    ''' Generates a random ConsoleColor color. 
    ''' </summary> 
    ''' <returns>ConsoleColor.</returns> 
    Public Shared Function [ConsoleColor]() As ConsoleColor 

     Dim Rand As New Random 
     Return [Enum].Parse(GetType(ConsoleColor), 
          Rand.Next(0, 15)) 

    End Function 

Это то, что я пытался, но иногда возвращается цвет пуст, потому что имя ConsoleColor неизвестно:

''' <summary> 
    ''' Generates a random QB color. 
    ''' </summary> 
    ''' <returns>Color.</returns> 
    Public Shared Function QB() As Color 

     Dim Rand As New Random 
     Return Color.FromName([Enum].Parse(GetType(ConsoleColor), 
           Rand.Next(0, 15)).ToString) 

    End Function 

PS: Я хочу, чтобы избежать использования старых методов VB6 (функция QBColor).

+5

Это терпит неудачу, потому что некоторые имена ConsoleColor не имеет System.Drawing.Colors коллеги. Например, «DarkYellow». Поскольку они всего лишь 15 или 16 из них, я просто сопоставляю их следующим образом: http://stackoverflow.com/a/1988854/1070452; некоторые из других ответов тоже интересны – Plutonix

+1

@ElektroStudios, вы должны подумать о принятии ответа мафу. – fubo

ответ

5

У меня была эта проблема себя сегодня и не могут прийти к согласию с обоими текущими ответами.

Я закончил проверку всех значений и обнаружил, что значения очень разные, я понятия не имею, почему люди рекомендуют конвертировать «по имени».

Name   Actual  Drawing.Color of same name 
Black  #000000  #000000 
DarkBlue  #000080  #00008B 
DarkGreen #008000  #006400 
DarkCyan  #008080  #008B8B 
DarkRed  #800000  #8B0000 
DarkMagenta #800080  #8B008B 
DarkYellow #808000  #000000 
Gray   #C0C0C0  #808080 
DarkGray  #808080  #A9A9A9 
Blue   #0000FF  #0000FF 
Green  #00FF00  #008000 
Cyan   #00FFFF  #00FFFF 
Red   #FF0000  #FF0000 
Magenta  #FF00FF  #FF00FF 
Yellow  #FFFF00  #FFFF00 
White  #FFFFFF  #FFFFFF 

CC RGB test

+2

это должно быть отмечено как правильный ответ – fubo

2

как о,

Module ColorExtension 

    <Extension()> 
    Public Function DrawingColor(ByVal color As ConsoleColor) As Color 
     Select color 
      Case ConsoleColor.Black 
       Return Color.Black 

      Case ConsoleColor.Blue 
       Return Color.Blue 

      Case ConsoleColor.Cyan 
       Return Color.Cyan 

      Case ConsoleColor.DarkBlue 
       Return ColorTranslator.FromHtml("#000080") 

      Case ConsoleColor.DarkGray 
       Return ColorTranslator.FromHtml("#808080") 

      Case ConsoleColor.DarkGreen 
       Return ColorTranslator.FromHtml("#008000") 

      Case ConsoleColor.DarkMagenta 
       Return ColorTranslator.FromHtml("#800080") 

      Case ConsoleColor.DarkRed 
       Return ColorTranslator.FromHtml("#800000") 

      Case ConsoleColor.DarkYellow 
       Return ColorTranslator.FromHtml("#808000") 

      Case ConsoleColor.Gray 
       Return ColorTranslator.FromHtml("#C0C0C0") 

      Case ConsoleColor.Green 
       Return ColorTranslator.FromHtml("#00FF00") 

      Case ConsoleColor.Magenta 
       Return Color.Magenta 

      Case ConsoleColor.Red 
       Return Color.Red 

      Case ConsoleColor.White 
       Return Color.White 

      Case Else 
       Return Color.Yellow 
     End Select 
    End Function 
End Module 

Разрешение,

Dim result As Drawing.Color = ConsoleColor.Red.DrawingColor() 
+1

Речь идет о единственном способе сделать это. ConsoleColor не содержит фактической информации о цвете. – Ashigore

+0

Спасибо, я могу приспособить его к моей функции – ElektroStudios

+0

@ Jodrell, что относительно цвета DarkYellow? который является точным эквивалентом? (Очер не найден в перечислении) – ElektroStudios

1

Просто адаптация решения @Jodrell

''' <summary> 
    ''' Generates a random QB color. 
    ''' </summary> 
    ''' <returns>Color.</returns> 
    Public Shared Function QB() As Color 

     Dim Rand As New Random 
     Dim c As Color = Color.FromName([Enum].Parse(GetType(ConsoleColor), 
                Rand.Next(0, 15)).ToString) 

     Select Case c.IsKnownColor 

      ' Fix for the 'Consolecolor.DarkYellow' value which doesn't have color information. 
      Case False 
       Return Color.FromArgb(255, 128, 128, 0) 

      Case Else 
       Return c 

     End Select 

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