所以我一直有這個問題,當調試,我得到一個訪問衝突,但是當我沒有調試器運行,我得到一個錯誤,告訴我,一個參數是無效的。它將我引向path.AddString(...);任何理由爲什麼?老實說,所有的參數都是正確的,否則編譯器會抓住它。這讓我很生氣。System.ArgumentException:參數無效。 GraphicsPath.AddString
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
if (!extended)
{
setColor ();
g.FillRectangle (new SolidBrush (currColor), this.ClientRectangle);
}
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
string szbuf = Program.AppName;
SolidBrush brushWhite = new SolidBrush (Color.White);
g.FillRectangle (brushWhite, 0, 0,
this.ClientSize.Width, this.ClientSize.Height);
FontFamily fontFamily = this.Font.FontFamily;
StringFormat strformat = StringFormat.GenericDefault;
SolidBrush brush = new SolidBrush (Color.FromArgb (255, 255, 255));
SizeF sz = g.MeasureString(szbuf, this.Font);
int w = ((this.Width/2) - ((int) sz.Width/2));
int h = 10;
GraphicsPath path = new GraphicsPath ();
float emSize = g.DpiY * this.Font.Size/72;
path.AddString (szbuf, fontFamily, 0, 48f, new Point (w, h), strformat);
for (int i = 1; i < 8; ++i)
{
Pen pen = new Pen (getColor (), i); //Color.FromArgb (32, 0, 128, 192), i);
pen.LineJoin = LineJoin.Round;
g.DrawPath (pen, path);
pen.Dispose ();
}
g.FillPath (brush, path);
fontFamily.Dispose ();
path.Dispose ();
brush.Dispose ();
g.Dispose ();
}
「否則,編譯器會抓住它」 - 這通常不是事實。編譯器可以告訴你是否將錯誤的類型傳遞給了某些東西,但是如果類型正確,但是該值錯誤,編譯器將無法辨別。例如,如果你正在創建一個圖像並指定x和y尺寸,編譯器會看到一個int進入並且很快樂,但是如果這個int是'-1',那麼我會希望該方法在運行時斷開,並告訴我一個異常我傳遞了一個無效值。 – Chris
我應該注意到,我並不是說你傳遞的是負寬度或類似的東西,只是解釋你對編譯器能夠停止發生的誤解。也許這會幫助你弄清楚自己正在發生什麼。 – Chris
另外一個stacktrace通常有助於指出事情出錯的確切位置。我認爲這就是導致你進行'path.AddString'調用的原因,但是我們有時看到完整的堆棧跟蹤和實際的異常類型有助於調試。 – Chris