将字符串转换为位置

时间:2017-03-10 19:46:02

标签: vb.net winforms controls

当我将控件的位置导出为字符串时,使用标准的Control.Location.ToString方法,我得到以下内容:

{X=163,Y=196}

如何将此字符串转回位置?是否有任何开箱即用的功能,或者我是否需要解析此字符串并自己完成?

更新: 我想将屏幕上的一些对象序列化为XML以保存进度并稍后再读回来。

1 个答案:

答案 0 :(得分:1)

如果您要序列化,那么序列化器应该处理从Point到字符串并返回的转换。如果检查序列化程序输出,它应如下所示:727, 97

此表单为InvariantString,NET提供了转换这些表单的方法,而无需解析文本:

Dim pt = Button10.Location

Dim cvtr = TypeDescriptor.GetConverter(GetType(Point))
' convert Pt to invariant string
Dim strPT = cvtr.ConvertToInvariantString(pt)
Console.WriteLine(strPT)

' try to convert back
Dim pt2 = DirectCast(cvtr.ConvertFromInvariantString(strPT), Point)

If pt.Equals(pt2) Then
    Console.Beep()
End If

输出:

  

727,97
  (哔)

但同样,序列化程序应该为你转换。

如果您正在做很多这样的事情,通用版本很方便:

Private Function CvtToInvariantString(Of T)(item As T) As String
    Dim cvtr = TypeDescriptor.GetConverter(GetType(T))

    Return cvtr.ConvertToInvariantString(item)
End Function

Private Function CvtFromInvariantString(Of T)(str As String) As T
    Dim cvtr = TypeDescriptor.GetConverter(GetType(T))

    Return DirectCast(cvtr.ConvertFromInvariantString(str), T)
End Function

用法:

Dim strPT = CvtToInvariantString(pt)

Dim pt2 = CvtFromInvariantString(Of Point)(strPT)