C# 无法获取TypeConverter.ConvertFromString以处理矩形

C# 无法获取TypeConverter.ConvertFromString以处理矩形,c#,winforms,typeconverter,C#,Winforms,Typeconverter,以下代码取自70-536 Microsoft.NET考试的measureup测试 private void frmMain_Paint(object sender, PaintEventArgs e) { System.ComponentModel.TypeConverter rectConverter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(Rectangle)); Rectangl

以下代码取自70-536 Microsoft.NET考试的measureup测试

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,50200200”不是Int32的有效值。我对TypeConverter类一点也不熟悉。但是根据解释,这应该在坐标(50,50)处绘制一个黑色矩形,大小为(200200)。然后使用充气方法在黑色矩形内绘制一个新的较小的蓝色矩形。但是为什么ConvertFromString失败

编辑:

我猜这是关于Rectangle类的ConvertFromString方法的.NET实现:


是的,我无法复制它,但不要停留在那个小细节上,看起来你正在试图找出一个更大的问题,只要让矩形工作,如果它一直困扰着你,稍后再回到这个问题上。像这样的东西应该会起作用

rect.Height = 200;
rect.Width = 200;
rect.PointToScreen(new Point(50, 50));

我认为这是一个本地化问题。我在一台显示数字为1,23而不是1.23的计算机上尝试了这个方法,我遇到了同样的问题

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

尽管你发布的代码有效。这里肯定有其他事情发生。很有趣。对我来说不是这样。可能是参考错误还是什么?你使用的是什么版本的.NET?在VS2010 framework 4.0中进行了测试。同意。简单的方法通常是最好的。