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

试试 ConvertFromInvariantString()。

于 2022-02-20T04:04:15.487 回答
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 回答