在 C# Web 应用程序中设置标志变量
本文关键字:设置 标志 变量 应用程序 Web | 更新日期: 2023-09-27 18:36:37
我已经编写了一个代码在文本框中使用属性,我正在设置一些这样的值
public string Color
{
get{};
set
{
SetColor(value);
}
}
private void SetColor(string level)
{
switch(level.ToLower())
{
case "high":
textbox1.BackColor = System.Drawing.Color.Red;
break;
case "medium":
textbox1.BackColor = System.Drawing.Color.Green;
break;
case "low":
textbox1.BackColor = System.Drawing.Color.Yellow;
break;
}
}
但我的主要目的是我需要设置标志,如果标志为高,它应该显示红色字体,同样,如果标志是中等的,它应该在标签中显示黄色字体。
public static class EnumExtensions
{
private static void CheckIsEnum<T>(bool withFlags)
{
CheckIsEnum(T) (True);
}
}
public static bool IsFlagSet<T>(this T value, T flag)
{
}
设置标志变量时是否需要使用管道符号?我在网上冲浪,但我得到了我没想到的答案。一个标志布尔值为真或假。如果标志为真,则应根据启用颜色字体。另外,请帮助我,我需要从数据库中获取数据。是否有可能并查看特定值是否具有高、低或中等风险并相应地显示字体
谁能建议我如何使用枚举将上述代码嵌入到标志中。
-
您可以定义带有或不带有 Description 属性的枚举,但我的代码将同时适用于两者:(如果您的枚举值由多个单词组成,并且您需要用空格(如"VeryHigh")作为值显示它们,但您将其显示为带有空格的"非常高",则可以使用描述属性。
public enum AlertType { [Description("High")] High, [Description("Medium")] Medium, [Description("Low")] Low }
现在使用一些帮助程序方法,例如此帮助程序类中的内容,您可以使用可以表示值/说明的字符串值获取枚举值。
public static class EnumUtils
{
public static string StringValueOf(Enum value)
{
var fi = value.GetType().GetField(value.ToString());
var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes.Length > 0)
{
return attributes[0].Description;
}
return value.ToString();
}
public static T EnumValueOf<T>(string enumStr)
{
string[] names = Enum.GetNames(typeof(T));
foreach (var name in names)
{
var enumVal = (Enum) Enum.Parse(typeof (T), name);
if (string.Compare(StringValueOf(enumVal), enumStr, StringComparison.OrdinalIgnoreCase) == 0)
{
return (T)Enum.Parse(typeof(T), name);
}
}
throw new ArgumentException("The string is not a description or value of the specified enum.");
}
}
- 现在,关于您的问题:
设置标志变量时是否需要使用管道符号?
不,您不需要它,因为您不能组合枚举中的多个值,因此例如,您不能说警报同时设置为高和低。[标志] 在枚举值可以组合时很有用,请参阅此处。
也请帮助我我需要从数据库中获取数据。 是否有可能,并查看特定值是否具有高,低或中等风险并相应地显示字体。
在这种情况下,可以使用帮助程序方法将枚举字符串转换为枚举值。
编辑
看起来您还需要 AlertType 和 Color 之间的映射,因此您的代码可以如下所示:
// your mappings go here.
private Dictionary<AlertType, Color> _alertColorMappings = new Dictionary<AlertType, Color>()
{
{AlertType.High, Color.Red},
{AlertType.Medium, Color.Green},
{AlertType.Low, Color.Yellow},
};
// Alert property which can be set through a mapping with a combobox
private AlertType _alert;
public AlertType Alert
{
get
{
return _alert;
}
set
{
if (_alert != value)
{
_alert = value;
textbox1.BackColor = _alertColorMappings[value];
}
}
}
希望这有帮助。