4

{X=-24,Y=10}によって生成された文字列からPoint.ToString();再びPointに変換したいですか?

文字列値を保存モードでxmlファイルに保存し、読み取りモードで再度ポイントするように読み取ります。

4

7 に答える 7

4
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]));
于 2012-04-28T19:11:19.647 に答える
2

System.Drawing.Pointメソッドはまったく定義されていません。この形式を取り、構造体Parseを返すことができる独自のメソッドを作成する必要があります。Point

System.Windows.PointにはParseメソッドがあり、ニーズにより適している場合があります。

ただし、XML に出力しているので、これは不要です。オブジェクト グラフをシリアライズおよびデシリアライズする必要があります。これにより、解析やフォーマットについて心配する必要なく、これが自動的に処理されます。

于 2012-04-28T19:09:25.903 に答える
1

このPoint.Parseを試すことができます

Point pointResult = Point.Parse("-24,10");
于 2012-04-28T19:09:56.540 に答える
1

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)
于 2013-10-30T20:10:44.803 に答える
1

今日はこの機能が必要だったので、コーディングしました。これは、「TryParse」アプローチを使用した、非常にうるさいパーサーです。私は、「何でもかんでも」がポイントとして解析される「怠惰な」解析と呼んでいるものは好きではありません。そして、私はエラーを投げるのが好きではありません。データ型の「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修飾子を削除または変更することもできます。しかし、私は Program クラスでそのメソッドを使用したので、私はpublic static. 自分に合わせてください。

于 2014-09-09T20:01:13.657 に答える
0

PointConverter ConvertFrom メソッドを参照してください。

于 2016-12-16T08:02:46.833 に答える