C#中如果textBox包含字符,return将字符的含义放入Label
In C# if textBox contains character, return the meaning of the character into the Label
你会如何处理这个...
我想要一个文本框,用户可以在其中输入某些字符,如下图所示:
在文本框的底部,我想有一些 Label
控件可以对应于文本框的输入。例如,如果用户在 TextBox
中键入 AOC-STGF,Label1
将显示 "Add On Card"
,Label2
将显示 "Standard"
,Label3
将显示"10GbE"
, Label4
会显示 "Fortville"
等等...
大致如下:
我正在考虑一堆 if
语句,但这不是一个好方法,而且很长。此外,我还必须考虑重复字符,例如,您可以在 TextBox
.
中两次提及 "G"
我当然不会为此使用正则表达式。我会使用一种简单的管道类型方法,其中一组处理器分别处理消息的下一部分。这很有效,因为过程 运行s 是线性的。我们在这里遇到的唯一问题是,如果一个可选步骤能够将第一个字符从后续步骤中抽出。您的数据似乎说明了这一点。
首先我们定义 ParserStep 的外观。我们为数据(字符代码、字符串)使用元组列表,为我们的 TODO 操作使用谓词:
public class ParserStep
{
public Action<string> ToDo { get; set; }
public List<Tuple<string, string>> Data { get; set; } = new List<Tuple<string, string>>();
public bool Optional { get; set; } = false;
public string ProcessStep(string message)
{
foreach (var d in Data)
{
if (message.StartsWith(d.Item1))
{
ToDo(d.Item2);
return message.Substring(d.Item1.Length);
}
}
if (!Optional)
throw new InvalidDataException();
return message;
}
}
然后我们创建一个 class,它知道如何 运行 步骤并处理修剪和整理:
public class Parser
{
public List<ParserStep> Steps { get; set; } = new List<ParserStep>();
public void Run(string message)
{
foreach (var step in Steps)
{
if (string.IsNullOrEmpty((message)))
return;
message = step.ProcessStep(message);
message = message.TrimStart('-');
}
}
}
现在我们可以构建 ParserStep 对象,在其上设置数据,告诉它们如何处理代码的值,并将它们添加到列表中。然后我们将它们交给将循环遍历它们的 Parser 对象。
这是一个快速示例:
var p = new Parser()
{
Steps =
{
new ParserStep()
{
Data = { Tuple.Create("AOC", "Add On Card") },
ToDo = (a => Console.WriteLine($"Product Family = {a}")),
Optional = false
},
new ParserStep()
{
Data =
{
Tuple.Create("S", "Standard"),
Tuple.Create("P", "Proprietary"),
Tuple.Create("C", "MicroLP"),
Tuple.Create("MH", "SIOM Hybrid"),
Tuple.Create("M", "Super IO")
},
ToDo = (a => Console.WriteLine($"Form Factor = {a}")),
Optional = false
}
}
};
请注意,作为 ToDo,我正在写入控制台。这是您在标签上设置值的地方!
那我们就这样称呼它:
p.Run("AOC-S");
这个简单的示例包含硬编码的所有内容,但您可以轻松修改以从数据库或其他任何内容中读取。最后,下面是一个完整的 .NET Core 控制台应用程序,用于显示完整的代码工作:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
namespace CoreConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var p = new Parser()
{
Steps =
{
new ParserStep()
{
Data = { Tuple.Create("AOC", "Add On Card") },
ToDo = (a => Console.WriteLine($"Product Family = {a}")),
Optional = false
},
new ParserStep()
{
Data =
{
Tuple.Create("S", "Standard"),
Tuple.Create("P", "Proprietary"),
Tuple.Create("C", "MicroLP"),
Tuple.Create("MH", "SIOM Hybrid"),
Tuple.Create("M", "Super IO")
},
ToDo = (a => Console.WriteLine($"Form Factor = {a}")),
Optional = false
}
}
};
p.Run("AOC-S");
Console.ReadLine();
}
}
public class ParserStep
{
public Action<string> ToDo { get; set; }
public List<Tuple<string, string>> Data { get; set; } = new List<Tuple<string, string>>();
public bool Optional { get; set; } = false;
public string ProcessStep(string message)
{
foreach (var d in Data)
{
if (message.StartsWith(d.Item1))
{
ToDo(d.Item2);
return message.Substring(d.Item1.Length);
}
}
if (!Optional)
throw new InvalidDataException();
return message;
}
}
public class Parser
{
public List<ParserStep> Steps { get; set; } = new List<ParserStep>();
public void Run(string message)
{
foreach (var step in Steps)
{
if (string.IsNullOrEmpty((message)))
return;
message = step.ProcessStep(message);
message = message.TrimStart('-');
}
}
}
}
干杯,谢谢你给我这个练习!
你会如何处理这个... 我想要一个文本框,用户可以在其中输入某些字符,如下图所示:
在文本框的底部,我想有一些 Label
控件可以对应于文本框的输入。例如,如果用户在 TextBox
中键入 AOC-STGF,Label1
将显示 "Add On Card"
,Label2
将显示 "Standard"
,Label3
将显示"10GbE"
, Label4
会显示 "Fortville"
等等...
大致如下:
我正在考虑一堆 if
语句,但这不是一个好方法,而且很长。此外,我还必须考虑重复字符,例如,您可以在 TextBox
.
"G"
我当然不会为此使用正则表达式。我会使用一种简单的管道类型方法,其中一组处理器分别处理消息的下一部分。这很有效,因为过程 运行s 是线性的。我们在这里遇到的唯一问题是,如果一个可选步骤能够将第一个字符从后续步骤中抽出。您的数据似乎说明了这一点。
首先我们定义 ParserStep 的外观。我们为数据(字符代码、字符串)使用元组列表,为我们的 TODO 操作使用谓词:
public class ParserStep
{
public Action<string> ToDo { get; set; }
public List<Tuple<string, string>> Data { get; set; } = new List<Tuple<string, string>>();
public bool Optional { get; set; } = false;
public string ProcessStep(string message)
{
foreach (var d in Data)
{
if (message.StartsWith(d.Item1))
{
ToDo(d.Item2);
return message.Substring(d.Item1.Length);
}
}
if (!Optional)
throw new InvalidDataException();
return message;
}
}
然后我们创建一个 class,它知道如何 运行 步骤并处理修剪和整理:
public class Parser
{
public List<ParserStep> Steps { get; set; } = new List<ParserStep>();
public void Run(string message)
{
foreach (var step in Steps)
{
if (string.IsNullOrEmpty((message)))
return;
message = step.ProcessStep(message);
message = message.TrimStart('-');
}
}
}
现在我们可以构建 ParserStep 对象,在其上设置数据,告诉它们如何处理代码的值,并将它们添加到列表中。然后我们将它们交给将循环遍历它们的 Parser 对象。
这是一个快速示例:
var p = new Parser()
{
Steps =
{
new ParserStep()
{
Data = { Tuple.Create("AOC", "Add On Card") },
ToDo = (a => Console.WriteLine($"Product Family = {a}")),
Optional = false
},
new ParserStep()
{
Data =
{
Tuple.Create("S", "Standard"),
Tuple.Create("P", "Proprietary"),
Tuple.Create("C", "MicroLP"),
Tuple.Create("MH", "SIOM Hybrid"),
Tuple.Create("M", "Super IO")
},
ToDo = (a => Console.WriteLine($"Form Factor = {a}")),
Optional = false
}
}
};
请注意,作为 ToDo,我正在写入控制台。这是您在标签上设置值的地方!
那我们就这样称呼它:
p.Run("AOC-S");
这个简单的示例包含硬编码的所有内容,但您可以轻松修改以从数据库或其他任何内容中读取。最后,下面是一个完整的 .NET Core 控制台应用程序,用于显示完整的代码工作:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
namespace CoreConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var p = new Parser()
{
Steps =
{
new ParserStep()
{
Data = { Tuple.Create("AOC", "Add On Card") },
ToDo = (a => Console.WriteLine($"Product Family = {a}")),
Optional = false
},
new ParserStep()
{
Data =
{
Tuple.Create("S", "Standard"),
Tuple.Create("P", "Proprietary"),
Tuple.Create("C", "MicroLP"),
Tuple.Create("MH", "SIOM Hybrid"),
Tuple.Create("M", "Super IO")
},
ToDo = (a => Console.WriteLine($"Form Factor = {a}")),
Optional = false
}
}
};
p.Run("AOC-S");
Console.ReadLine();
}
}
public class ParserStep
{
public Action<string> ToDo { get; set; }
public List<Tuple<string, string>> Data { get; set; } = new List<Tuple<string, string>>();
public bool Optional { get; set; } = false;
public string ProcessStep(string message)
{
foreach (var d in Data)
{
if (message.StartsWith(d.Item1))
{
ToDo(d.Item2);
return message.Substring(d.Item1.Length);
}
}
if (!Optional)
throw new InvalidDataException();
return message;
}
}
public class Parser
{
public List<ParserStep> Steps { get; set; } = new List<ParserStep>();
public void Run(string message)
{
foreach (var step in Steps)
{
if (string.IsNullOrEmpty((message)))
return;
message = step.ProcessStep(message);
message = message.TrimStart('-');
}
}
}
}
干杯,谢谢你给我这个练习!