1

次のコードは、70-536 Microsoft .NET 試験のメジャーアップ テストから取得したものです。

private void frmMain_Paint(object sender, PaintEventArgs e)
{
    System.ComponentModel.TypeConverter rectConverter =
        System.ComponentModel.TypeDescriptor.GetConverter(typeof(Rectangle));

    Rectangle rect = (Rectangle)rectConverter.ConvertFromString("50,50,200,200"); //fails
    e.Graphics.DrawRectangle(Pens.Black, rect);
    rect.Inflate(-10, -10);
    e.Graphics.DrawRectangle(Pens.Blue, rect);
}

しかし、ライン

Rectangle rect = (Rectangle)rectConverter.ConvertFromString("50,50,200,200");

「50,50,200,200」は Int32 の有効な値ではありません」で失敗します。私は TypeConverter クラスにまったく慣れていません。しかし、説明によると、これは座標 (50,50) に黒い四角形を描画することになっていました。サイズ (200,200). 次に、Inflate メソッドを使用して、黒い四角形の内側に新しい小さな青い四角形を描画します. しかし、ConvertFromString が失敗するのはなぜですか?

編集:

これは、Rectangle クラスに関する ConvertFromString メソッドの .NET 実装だと思います。

http://www.dotnetframework.org/default.aspx/DotNET/DotNET/8@0/untmp/whidbey/REDBITS/ndp/fx/src/CommonUI/System/Drawing/RectangleConverter@cs/1/RectangleConverter@cs

4

3 に答える 3

2

ええ、再現できませんが、細かいことにはこだわらないでください。それよりも大きな問題を理解しようとしているようです。四角形を機能させて、問題が解決しない場合は、後でこれに戻ってください。 . このようなものはうまくいくはずです..

rect.Height = 200;
rect.Width = 200;
rect.PointToScreen(new Point(50, 50));
于 2013-06-15T15:12:48.827 に答える
0

これはローカライズの問題だと思います。数値を 1.23 ではなく 1.23 として表示するコンピューターでこれを試してみましたが、同じ問題が発生しました。

 (Rectangle)r.ConvertFromString(null,
                    new System.Globalization.CultureInfo("en-US"),"0,0,23,50");

動作しますが

于 2016-10-26T20:16:05.977 に答える