我正在为执行各种运动控制任务的机器构建用户界面(HMI,人机界面)。运动控制器在编程方面有点原始,因此我以整数的形式向我发送错误和状态代码。
作为一个例子:我有一个盒子,显示机器在摩托车过程中处于什么阶段。机器发送了一个' 1,我希望该框能说“等待启动摩托车”。'以下是其他一些内容:
1 - Waiting to start autocycle.
2 - Returning to home.
3 - Waiting at home.
4 - Tracking encoder A.
5 - Tracking encoder B.
等等。有没有一种干净的方法来维护这些消息在VB.net中使用资源,我不知道,或者我应该只创建一个包含类似
的XML文件<statusmessage code="1" message="Waiting to start autocycle.">
并在程序启动时读取它?
我当前的方法是一个硬编码的select语句,其中包含实际VB源代码中的字符串,因此如果要更改消息(粗略),则必须重新编译该程序。
如果相关,该程序永远不会是多语言。
感谢您的任何建议!
答案 0 :(得分:1)
使用.xml文件很容易做到这一点。那个或类似的文件格式将是我的偏好。有些人更喜欢使用app.config或文件格式。当我评估这样的事情时,维护的简单性可能是最优先考虑的事情,并且有几种方法在这方面同样有效。可以使用数据库表,但这似乎是一个过度复杂的。
答案 1 :(得分:1)
如果您不需要担心多种语言,可以这样做......
Public Enum Foo
<Description("Waiting to start autocycle")> WaitingToStartAutoCycle = 1
<Description("Returning to home")> ReturningToHome = 2
' [ etc...]
End Enum
然后,您可以使用反射来获取描述。这是从更大的代码片段中删除的,如果我错过了部分代码,请原谅我。
Public Function GetEnumDescription(ByVal value As Object) As String
Dim type As Type = value.GetType()
' Excersize for the reader, validate that type is actually an Enum
Dim f As FieldInfo = type.GetField(value.ToString)
If f IsNot Nothing Then
Dim ca() As Object = f.GetCustomAttributes(GetType(DescriptionAttribute), False)
If ca IsNot Nothing AndAlso ca.Length > 0 Then
Return CType(ca(0), DescriptionAttribute).Description
End If
End If
Return value.ToString ' Last resort if no Description attribute
End Function