0

解决:

在项目设置中禁用“优化代码”后,现在一切正常


我在三个项目中有以下代码......一个新创建的空白项目和两个实际项目。在新创建的空白一一实际项目中,它可以工作。但在第三个项目中,它没有。

System.Drawing.Bitmap m = new System.Drawing.Bitmap((int)(this.NomLabel.Size.Width * pcntDbl), (int)(this.NomLabel.Size.Height * pcntDbl));
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(m);
System.Drawing.Font stringFont = new System.Drawing.Font("Arial", (float)(this.NomLabel.Font.Size * pcntDbl), System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
float foo = g.MeasureString(this.NomLabel.Text, stringFont).Width;

当我说不时,错误是“当前上下文中不存在 foo”是尝试访问 foo 时的错误。我把所有东西都放在一个 try/catch 块中,没有任何东西被抛出。我不能使用 foo (显然,但我需要)并且不确定这里发生了什么。相同的代码适用于新创建的空白项目。奇怪的是,将最后一行更改为

string foo = g.MeasureString(this.NomLabel.Text, stringFont).Width.ToString();

成功将浮点数发送到字符串,但我无法将其转换回双精度或整数,它做同样的事情。同样,我的意思是它看起来像是在我单步执行代码行时执行了它,但没有做任何事情。任何人都知道发生了什么或我可以尝试什么?谢谢!

顺便说一句,对于那些想知道的人来说,这个项目太大了,无法将它放在一个新项目中。

编辑:TextRenderer.MeasureString 做同样的事情。看起来它执行但在尝试将宽度保存到 int 变量时没有返回任何内容。

编辑2:我刚刚添加了一个

int temp = (int)foo; 

虽然我现在可以读取 foo 变量,但我无法读取 temp 变量。

编辑 3: this 所在的函数由构造函数调用。我这样做是为了显式调用此函数而不是在构造函数中调用,但它仍然不起作用。我还在这段代码上方为 NomLabel 设置了 SuspendLayout(),并将其移至此代码下方,但仍然无法正常工作。

当执行 foo 行并移动到 temp 行时,我可以看到 foo 变量及其值。但是一旦我到达临时行并尝试执行它,它就会跳转到下一行代码,我什么也看不到。同样,所有这些在全新项目中都可以正常工作,所以我不明白这个项目可能存在什么问题。

编辑 4:我将现有的(损坏的)csproj 文件复制到空白项目中,从中删除了旧文件和引用,添加了我的空白(新)文件并且它不起作用。我认为它与 csproj 文件有关,因为它是唯一随着空白项目而改变的东西。

4

1 回答 1

1

在项目设置中禁用“优化代码”后,现在一切正常。

于 2012-10-31T16:14:47.493 回答