从字符串转换为system.drawing.point c#

我想转换由Point.ToString();生成的字符串{X=-24,Y=10} Point.ToString(); 重新点?

我在保存模式下将字符串值保存在xml文件中,我希望在读取模式下再次将其读回。

 var myStringWhichCantBeChanged="{X=-24,Y=10}"; var g=Regex.Replace(myStringWhichCantBeChanged,@"[\{\}a-zA-Z=]", "").Split(','); Point pointResult = new Point( int.Parse (g[0]), int.Parse( g[1])); 

System.Drawing.Point根本没有定义Parse方法 – 您需要自己编写可以采用此格式并返回Point结构的方法。

System.Windows.Point确实有一个Parse方法,可能更适合您的需要。

但是,由于您要输出到XML,因此不需要这样做。 您应该对对象图进行序列化和反序列化,这将自动处理此问题,而无需担心解析和格式化。

你可以尝试这个Point.Parse

 Point pointResult = Point.Parse("-24,10"); 

我今天需要这个function,所以我只是编码了。 这是一个非常挑剔的解析器,使用“TryParse”方法。 我不喜欢我称之为’懒惰’的解析,其中“blah4,9anything”会被解析为一个点。 而且我不喜欢抛出错误。 数据类型的’TryParse’方法对我来说非常强大。 所以这是我的任何使用的实现。 我唯一的要求是如果你发现了一个bug,请告诉我! 🙂

 public static bool TryParsePoint(string s, out System.Drawing.Point p) { p = new System.Drawing.Point(); string s1 = "{X="; string s2 = ",Y="; string s3 = "}"; int x1 = s.IndexOf(s1, StringComparison.OrdinalIgnoreCase); int x2 = s.IndexOf(s2, StringComparison.OrdinalIgnoreCase); int x3 = s.IndexOf(s3, StringComparison.OrdinalIgnoreCase); if (x1 < 0 || x1 >= x2 || x2 >= x3) { return false; } s1 = s.Substring(x1 + s1.Length, x2 - x1 - s1.Length); s2 = s.Substring(x2 + s2.Length, x3 - x2 - s2.Length); int i = 0; if (Int32.TryParse(s1, out i) == false) { return false; } pX = i; if (Int32.TryParse(s2, out i) == false) { return false; } pY = i; return true; } // public static bool TryParsePoint(string s, out System.Drawing.Point p) 

请注意,您可能还想删除或更改方法的publicstatic修饰符。 但是我在Program类中使用了这个方法,所以我的需要是public static 。 适合自己。

Hans Passant有正确的解决方案:不要使用Point.ToString() ,它会为您提供疯狂的,不可重复使用的字符串(MSDN称之为“ 人类可读 ”)。 请改用PointConverter类。

要生成字符串:

 Dim myPoint As New Point(0, 0) Dim pointConverter As System.ComponentModel.TypeConverter = _ System.ComponentModel.TypeDescriptor.GetConverter(GetType(Point)) Dim pointAsString As String = pointConverter.ConvertToString(myPoint) 

并解释上面的字符串:

 Dim pointConverter As System.ComponentModel.TypeConverter = _ System.ComponentModel.TypeDescriptor.GetConverter(GetType(Point)) Dim myNewPoint As New Point = pointConverter.ConvertFromString(pointAsString) 

请参阅PointConverter ConvertFrom方法。