0

解決済み:

プロジェクト設定で「コードの最適化」を無効にすると、すべてが機能するようになります


私は3つのプロジェクトに次のコードを持っています...新しく作成された空白のプロジェクトと2つの実際のプロジェクトです。新しく作成された空白の1つと1つの実際のプロジェクトでは、それは機能します。しかし、3番目のプロジェクトではそうではありません。

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();

floatを文字列に正常に送信しますが、doubleまたはintに戻すことはできません。同じことを行います。同じことですが、ステップスルーするとコード行が実行されるように見えますが、何も実行されません。何が起こっているのか、私が何を試すことができるのか、誰かが知っていますか?ありがとう!

ちなみに、このプロジェクトは大きすぎて、疑問に思っている人のために新しいプロジェクトに入れることはできません。

編集:TextRenderer.MeasureStringは同じことをします。実行されているように見えますが、幅をint変数に保存しようとしても何も返されません。

編集2:私はちょうど追加しました

int temp = (int)foo; 

これでfoo変数を読み取ることはできますが、temp変数を読み取ることはできません。

編集3:これが含まれている関数はコンストラクターによって呼び出されます。この関数がコンストラクターではなく明示的に呼び出されるように作成しましたが、それでも機能しませんでした。また、このコードのチャンクの上にNomLabelのSuspendLayout()があり、それをこのコードの下に移動しましたが、それでも機能しませんでした。

foo行を実行して一時行に移動すると、foo変数とその値が表示されます。しかし、一時行に到達してそれを実行しようとすると、コードの次の行にジャンプし、何も表示されません。繰り返しになりますが、これはすべて新しいプロジェクトで正常に機能するため、このプロジェクトで何が問題になるのかわかりません。

編集4:既存の(壊れた)csprojファイルを空のプロジェクトにコピーし、古いファイルと参照を削除し、空の(新しい)ファイルを追加しましたが、機能しません。空白のプロジェクトで変更されたのは、csprojファイルだけだと思います。

4

1 に答える 1

1

プロジェクト設定で「コードの最適化」を無効にすると、すべてが機能するようになります。

于 2012-10-31T16:14:47.493 に答える