【问题标题】:set object field via string通过字符串设置对象字段
【发布时间】:2015-10-12 23:18:20
【问题描述】:

编辑:全部重新编辑以更清楚地说明问题:

我做的时候没想到会这样:

   Dim Label1 As Label
    Dim testvar As String = "BottomRight"
    Dim testalign As ContentAlignment
    testalign = ContentAlignment.testvar
    Label1.TextAlign = testalign

“BottomRight”是您在智能感知中获得的无数选择之一。使用字符串,因为完整代码根据字符串变量将“Label1.textalign”设置为不同的设置。

显然 ContentAlignment.testvar 会引发错误。我需要保留由字符串值设置的可枚举。完全无法理解这一点 - 概念对于我的阶段来说太先进了,但有什么办法可以实现这一点?两天的寻找和失去希望..

【问题讨论】:

  • 既然已经有了枚举,为什么还要使用字符串? testvar = ContentAlignment.BottomRight : testalign = testvar
  • 在帖子中 - 我需要使用一个字符串 - 完整的代码涉及从数据集中提取字符串以及从这些字符串设置的各个控件上的文本对齐。因此,如上所述,需要通过字符串来实现这一点。但是,如果我的术语有误/误导,感谢您的回答和道歉

标签: vb.net class object properties enumerable


【解决方案1】:

如果您必须使用字符串变量,您有两种选择:

选项一

Enum.Parse

选项二

Select Case

Select Case testvar.Trim.ToLower
    Case "bottomright"
        testalign = ContentAlignment.BottomRight

    Case ....
End Select

【讨论】:

  • 谢谢山姆。试图避免 Select Case 方法,因为最终代码的某些部分有很长的枚举字段列表。阅读一下 enum.parse - 你有一个例子在问题场景中如何使用吗?
  • 这是一个类的单一方法。我相信你可以弄清楚如何使用它。
【解决方案2】:

终于!在 Sam 的指导下,方法如下:

    Dim Label1 As Label
    Dim testvar As String = "BottomRight"
    Dim testalign As New ContentAlignment
    testalign = CType([Enum].Parse(GetType(ContentAlignment), testvar), ContentAlignment)
    Label1.TextAlign = testalign

不确定它是否适用于所有类 - 它不适用于 colorContentAlignment 下的枚举值被列为公共常量——因此它们可能必须属于这种类型。

【讨论】:

  • 正确。这适用于枚举。 Color 是一个结构体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 2013-09-30
相关资源
最近更新 更多