2

社内の WinForms アプリの 1 つにあるハンドルされていない例外ハンドラーは、このエラーと、本番環境での使用による同じバリエーションを定期的に報告しています (ハンドルされていない例外が発生するたびに電子メールで送信するように構成されています)。ただし、これは再現性がなく、すべて XP SP3 であるさまざまなユーザーのマシンでランダムな間隔で発生します。

これは、データグリッドのマスクされたテキスト ボックスに関連しているように見えますが、多くの画面にある数十のコントロールのうち、同じ 3 つのコントロールにのみ表示されるようです。これらのコントロールには、フォントが指定されていません。

System.ArgumentException: Parameter is not valid.
   at System.Drawing.Font.GetHeight(Graphics graphics)
   at System.Drawing.Font.GetHeight()
   at System.Drawing.Font.get_Height()
   at System.Windows.Forms.Control.set_Font(Font value)
   at System.Windows.Forms.DataGridViewComboBoxEditingControl.ApplyCellStyleToEditingControl(DataridViewCellStyle dataGridViewCellStyle)
   at System.Windows.Forms.DataGridView.BeginEditInternal(Boolean selectAll)
   at System.Windows.Forms.DataGridView.ProcessKeyEventArgs(Message& m)
   at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
   at System.Windows.Forms.Control.WmKeyChar(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.DataGridView.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam,
IntPtr lparam)

本当に困惑したのは、スタック トレースが完全に System 名前空間内にあるということです。そのため、フォントに何か問題がありますが、それが何であるかはわかりません。「パラメーターが無効です」は、パラメーターの何が無効であるかについて多くの情報を提供しません (これは、基になる GDI ライブラリからのものです)。

また、クラスの 1 つを通過する同様の例外が発生するため、エラーをトラップすることができました。

System.ArgumentException: Parameter is not valid.
   at System.Drawing.Font.GetHeight(Graphics graphics)
   at System.Drawing.Font.GetHeight()
   at System.Drawing.Font.get_Height()
   at System.Windows.Forms.Control.set_Font(Font value)
   at MyApp.MaskedTextBoxEditingControl.ApplyCellStyleToEditingControl(DataGridViewCellStyle
dataGridViewCellStyle)

問題のコードは次のとおりです。

public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle){
  this.Font = dataGridViewCellStyle.Font; 
  // set other things
}

その行を try/catch ブロックでラップし、渡されたフォントで ToString() を呼び出し、次の結果を取得しました。 False]」なので、何が起こっているのかわかりません。何か案は?

4

1 に答える 1

0

理由: このエラーの一般的な理由は、無効な値をパラメーターとして関数に渡していることです。私の仮定は、あなたがあなたのメソッドを次のように呼び出しているということです

  ApplyCellStyleToEditingControl(getStyleFromSomeWhere);

上記の例では、getStyleFromSomeWhereが無効であるため、例外がスローされます

解決:

ここでの最善の解決策は、この例外を受け取った (そして電子メールを受け取った) ときはいつでも、パラメーターを自分自身にも送信することです。このようにして、例外が発生したときのパラメーターの値を診断し、根本原因を診断できます。

于 2013-08-02T07:37:56.353 に答える