VB.Net:" Nice",将整数错误代码与UI的错误字符串匹配的可维护方式

时间:2014-11-17 23:02:59

标签: vb.net string user-interface

我正在为执行各种运动控制任务的机器构建用户界面(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源代码中的字符串,因此如果要更改消息(粗略),则必须重新编译该程序。

如果相关,该程序永远不会是多语言。

感谢您的任何建议!

2 个答案:

答案 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