- - PR -
C# MDI 子フォーム表示時の例外発生
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-10-07 14:55
はじめまして
お手数ですが、御教え願えないでしょうか。 [環境] Microsoft Visual C# 2005 SP2 [ソースの作り] MDIを利用して、子Formを呼び出す処理を作製しています。 (DropDownItemsのClickイベントで下記のソースの処理を行います) [現象] ・子フォームを閉じたり、開いたりを行うと f6.Show()の部分にて例外エラーが発生してしまいます。 発生頻度は不規則です。 [ソース引用?] /*----------------------------*/ Form6 f6 = new Form6(this); f6.MdiParent = this; flg_form1_F6TRUE = true; ← 子フォームが呼び出された事を示すフラグ f6.Show(); /*----------------------------*/ [エラ内容] System.InvalidOperationException はハンドルされませんでした。 Message="オートフィル列がサイズ変更されるときに、この操作を実行することはできません。" Source="System.Windows.Forms" 何所から調べれば良いのか良く分からない状態でして、 対策等ご教授頂けないでしょうか。 | ||||||||||||
|
投稿日時: 2008-10-07 15:15
まずは、ステップ実行してみましょう。
エラーの内容から推測するとMDI子Formは関係なさそうです。 MDI子Formを開くときにどのような処理をしているか、その辺を調査してみてください。 | ||||||||||||
|
投稿日時: 2008-10-08 17:30
ご返信ありがとう御座います。
発生頻度が低いために、ステップ実行で捕らえる事が困難でして、 少し困っています。 現状、出来る事からやってみました。 MDI子Formを開くときにどのような処理をしているか Form6 f6 = new Form6(this); 周辺の処理を重点的に調べるという意味で、 form6のイベント処理等が悪さしている可能性を考えて、「Debug.Print」 を使って処理が、こけた部分箇所をさがしてみました。 Form6-InitializeComponent(); 以降の処理に特に意図していないイベント等は発生していませんでした。 何所が悪いのかまだ特定できていません。 (呼び出し履歴も調べてみましたが、正常時と異常時に違いは有りませんでした。) このような際に、有効なデバッグの方法はありますでしょうか。 非常に素人な質問だとは思いますが、よろしく御願いします。 | ||||||||||||
|
投稿日時: 2008-10-08 18:32
確実なのはログ収集。 例外が発生しているなら発生場所くらいわかりそうですが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2008-10-08 19:50
例外が発生したときのスタックトレースは得られないのでしょうか?もし得られるのならばそれを提示されたほうが良いと思います。
以下、あてずっぽうな推理になりますが、InvalidOperationException が出ていることから考えて、フォームに貼ったコンポーネントが出しているような気もします。Show はそのきっかけにすぎず、例外がどこで起きているかはスタックトレースを見ないと分からないように思います。 エラーメッセージにある「オートフィル列」とはなんのことなんでしょうね。グリッド系のコンポーネントかなにかですか? | ||||||||||||
|
投稿日時: 2008-10-08 23:30
まずは訂正を。
でした。
ここより、DataGridViewなどが出力しているエラーかなと判断しました。
ですね。 予想ですが、DataTableなどをBindしているコントロール辺りがあやしいのかなと思います。 だとすると、特定のデータを呼び出したときに発生しているのかな、と。 | ||||||||||||
|
投稿日時: 2008-10-20 10:17
お世話になっております。
すいませんがもう少し御教え願えないでしょうか。
すいません。スタックトレースをどうやって使うかがよく分かりません。 「StackTrace クラス」を見よう見まねで使ってみたのですが、 正確な情報をつかむ事が出来ません。 例: try { f6.Show(); } catch { StackTrace st = new StackTrace(true); string stackIndent = ""; for (int i = 0; i < st.FrameCount; i++) { // Note that high up the call stack, there is only // one stack frame. StackFrame sf = st.GetFrame(i); ←line306 Console.WriteLine(); Console.WriteLine(stackIndent + " Method: {0}", sf.GetMethod()); Console.WriteLine(stackIndent + " File: {0}", sf.GetFileName()); Console.WriteLine(stackIndent + " Line Number: {0}", sf.GetFileLineNumber()); stackIndent += " "; } 出力結果 Method: Void F6_Show_processing() File: E:\Sample1\Form1.cs Line Number: 306
貴重なご意見ありがとう御座います。 ユーザー入力ようのDGV呼び出しですので、特定のデータを呼び出しているようには 思えないのが現状です。 また、例外の発生頻度も低いため(同じ事をしているのに)非常に悩んでいます。 | ||||||||||||
|
投稿日時: 2008-10-20 11:18
うーん、何かあえて難しくしているような。
私もこの辺あまり詳しくないのですが、Exception.StackTraceプロパティでよいのでは。 試したところ、エラーの発生元はすぐに特定できました。 |
1