从字符串转换为 system.drawing.point c#
本文关键字:drawing point system 字符串 转换 | 更新日期: 2023-09-27 18:32:39
我想再次从Point.ToString();
生成的字符串{X=-24,Y=10}
转换为Point?
我在保存模式下将字符串值保存在 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");
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)
我
自己今天需要这个功能,所以我只是编写了它。这是一个非常挑剔的解析器,使用"TryParse"方法。我不喜欢我所谓的"懒惰"解析,其中"blah4,9anything"会被解析为一个点。而且我不喜欢抛出错误。数据类型的"TryParse"方法对我来说非常健壮。所以这是我的实现供任何人使用。我唯一的要求是,如果您发现错误,请告诉我!:)
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; } p.X = i;
if (Int32.TryParse(s2, out i) == false) { return false; } p.Y = i;
return true;
} // public static bool TryParsePoint(string s, out System.Drawing.Point p)
请注意,您可能还希望删除或更改方法的public
或static
修饰符。但是我在程序类中使用了该方法,所以我需要public static
.适合自己。
请参阅 PointConverter ConvertFrom 方法。
试试这个,这是我在我的项目中使用的。
string str = "-24,10";
Point pt = new Point(Int32.Parse(str.Split(',')[0]), Int32.Parse(str.Split(',')[1]));