C #에서 문자열을 색상으로 변환
"RED"와 같은 입력 문자열 Color.Red
을 C # 의 실제 색상 유형 으로 변환하는 방법에 대한 문제가 발생했습니다 . 이 작업을 수행하는 좋은 방법이 있습니까?
각 색상 유형에 대해 switch 문과 case 문을 사용하는 것을 생각할 수 있지만 충분히 영리하다고 생각하지 않습니다.
Color red = Color.FromName("Red");
MSDN은 어떤 식 으로든 말하지 않으므로 대소 문자를 구분할 가능성이 높습니다. (업데이트 : 분명히 그렇지 않습니다.)
내가 말할 수있는 한도 ColorTranslator.FromHtml
있습니다.
경우 Color.FromName
일치하는 항목을 찾을 수 없습니다, 그것은 반환new Color(0,0,0);
경우 ColorTranslator.FromHtml
일치하는 항목을 찾을 수 없습니다, 그것은 예외가 발생합니다.
최신 정보:
Microsoft.Xna.Framework.Graphics.Color를 사용하고 있기 때문에 약간 까다로워집니다.
using XColor = Microsoft.Xna.Framework.Graphics.Color;
using CColor = System.Drawing.Color;
CColor clrColor = CColor.FromName("Red");
XColor xColor = new XColor(clrColor.R, clrColor.G, clrColor.B, clrColor.A);
System.Drawing.Color myColor = System.Drawing.ColorTranslator.FromHtml("Red");
(HTML 스타일의 16 진수 색상을 허용하려면 내 방법을 사용하십시오.)
(어떤 Color
유형으로 시작할지 언급했다면 정말 좋았을 것 입니다 ...)
이를 수행하는 간단한 방법 중 하나는 리플렉션을 통해 사전을 만드는 것입니다.
public static class Colors
{
private static readonly Dictionary<string, Color> dictionary =
typeof(Color).GetProperties(BindingFlags.Public |
BindingFlags.Static)
.Where(prop => prop.PropertyType == typeof(Color))
.ToDictionary(prop => prop.Name,
prop => (Color) prop.GetValue(null, null)));
public static Color FromName(string name)
{
// Adjust behaviour for lookup failure etc
return dictionary[name];
}
}
첫 번째 조회에서는 상대적으로 느리지 만 (반사를 사용하여 모든 속성을 찾는 동안) 그 후에는 매우 빠릅니다.
대소 문자를 구분하지 않으 StringComparer.OrdinalIgnoreCase
려면 ToDictionary
호출 에서 추가 인수로 같은 것을 전달할 수 있습니다 . 원하는 경우 TryParse
etc 메소드를 쉽게 추가 할 수 있습니다 .
물론 한곳에서만 필요하다면 별도의 수업 등으로 신경 쓰지 마세요 :)
자신이 사용하고있는 코멘트에 언급 된 OP 이후 Microsoft.Xna.Framework.Graphics.Color
보다는 System.Drawing.Color
먼저 다음 System.Drawing.Color을 만들로 변환 할 수 있습니다Microsoft.Xna.Framework.Graphics.Color
public static Color FromName(string colorName)
{
System.Drawing.Color systemColor = System.Drawing.Color.FromName(colorName);
return new Color(systemColor.R, systemColor.G, systemColor.B, systemColor.A); //Here Color is Microsoft.Xna.Framework.Graphics.Color
}
WPF에서와 같이 System.Windows.Media.Color가 필요한 경우 찾고있는 항목에 따라 매우 쉽습니다.
System.Windows.Media.Color color = (Color)System.Windows.Media.ColorConverter.ConvertFromString("Red");//or hexadecimal color, e.g. #131A84
xml-strings를 통해 색상을 전송하려면 다음을 발견했습니다.
Color x = Color.Red; // for example
String s = x.ToArgb().ToString()
... to/from xml ...
Int32 argb = Convert.ToInt32(s);
Color red = Color.FromArgb(argb);
이것은 내 요구에 잘 맞았습니다.) 누군가가 그것을 사용할 수 있기를 바랍니다 ....
public static Color FromName(String name)
{
var color_props= typeof(Colors).GetProperties();
foreach (var c in color_props)
if (name.Equals(c.Name, StringComparison.OrdinalIgnoreCase))
return (Color)c.GetValue(new Color(), null);
return Colors.Transparent;
}
가장 간단한 방법 :
string input = null;
Color color = Color.White;
TextBoxText_Changed(object sender, EventsArgs e)
{
input = TextBox.Text;
}
Button_Click(object sender, EventsArgs e)
{
color = Color.FromName(input)
}
이전에 다음과 같은 것을 사용했습니다.
public static T CreateFromString<T>(string stringToCreateFrom) {
T output = Activator.CreateInstance<T>();
if (!output.GetType().IsEnum)
throw new IllegalTypeException();
try {
output = (T) Enum.Parse(typeof (T), stringToCreateFrom, true);
}
catch (Exception ex) {
string error = "Cannot parse '" + stringToCreateFrom + "' to enum '" + typeof (T).FullName + "'";
_logger.Error(error, ex);
throw new IllegalArgumentException(error, ex);
}
return output;
}
참고 URL : https://stackoverflow.com/questions/3391462/convert-string-to-color-in-c-sharp
'Nice programing' 카테고리의 다른 글
jQuery는 목록 상단에 빈 옵션을 추가하고 기존 드롭 다운을 선택합니다. (0) | 2020.12.10 |
---|---|
scanf의 단점 (0) | 2020.12.10 |
전달 된 의도에서 추가 항목 제거 (0) | 2020.12.10 |
다른 파일의 내용을 읽어서 makefile에 변수 만들기 (0) | 2020.12.10 |
Vim Command-T 플러그인 오류 : C 확장을로드 할 수 없습니다. (0) | 2020.12.10 |