- - PR -
ブレークポイントにとまらない
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-17 17:30
いつも拝見させて頂いております。
大変恐縮ですが、以下についてご教示いただければ幸いです。 過去のトピックなども参照したのですが、それでも分かりませんでした。 よろしくお願いします。 環境 ・VS.NET 2003 ・Windowsフォーム ・構成プロパティ デバッグ情報を生成する:チェック済み ・ソリューション構成:Debugモード ・PDBファイル:ビルド/リビルド時に更新されています ・ステップイン実行(F11)で開始できます 現象 プログラム構成は、FormAのボタン1をクリックしてFormBを表示する、 というようなものです。 FormAのボタン1をクリックすると、FormBのLoadイベントのコードが実行されます。 Loadイベント内のコードでは、ブレークポイントがききます。 次にFormBの任意のボタンをクリックすると、ブレークポイントがきかなくなりました。 ブレークポイントのきかないままで、FormBを閉じてFormAに戻り、 再度ボタン1をクリックしてFormBを表示すると、 今度はLoadイベント内でもとまりません。 以上 | ||||||||
|
投稿日時: 2006-04-17 17:39
Closeしただけでは?>インスタンスを破棄していない。
つまり、Visible=Falseの状態。 Loadは「初めて」表示される直前のみ発生します。 | ||||||||
|
投稿日時: 2006-04-17 17:42
すみません。説明不足でした。
FormBはDisposeしています。 破棄して閉じています。 | ||||||||
|
投稿日時: 2006-04-17 17:46
ボタン1とFormBの現象が再現するボタンのコードを書いてみてください。
#私事で恐縮ですが、もう帰宅しますので以降は深夜の返信となってしまいします。(汗 [ メッセージ編集済み 編集者: まどか 編集日時 2006-04-17 17:49 ] | ||||||||
|
投稿日時: 2006-04-17 18:09
まどかさま
大変お手数をおかけします。ご返信はとくに気にされないでください。 いつでもお待ちしています。 本来のコードをそのまま載せられないので、かなりシンプルにさせて頂きます。 大体このようなことをやっています。 よろしくお願いします。 ##FormA内のコード ・ボタン1クリック Private Sub btnButton1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnButton1.Click Try Dim _fm As New FormB(prm1,prm2) _fm.ShowDialog() Catch ex As Exception messagebox.show(ex.message) End Try End Sub ### FormB内のコード ・コンストラクタ Friend Sub New(ByVal prm1 As String, ByVal prm2 As String) MyBase.New() InitializeComponent() Try FormAからの引数を取得、FormBのprivateオブジェクト生成など _obj =new Object(prm1 ,prm2) Catch ex As Exception messagebox.show(ex.message) End Try End Sub ・Loadイベント Private Sub FormB_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try … データを取得、データグリッドの設定、 フォーム上のコントロールにイベントハンドラを設定、など SetData() SetDataFrid() AddHandles() Catch ex As Exception messagebox.show(ex.message) End Try End Sub | ||||||||
|
投稿日時: 2006-04-17 18:40
これが原因だと断定するために、クリックしない場合のテストも必要ですね。 また、ここのコードを出さないと検証できません。 ブレーク ポイントに止まらないというのも、 MessageBox を表示するなりして通っていることを証明しなければなりません。
これは、問題なく動くでしょうね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-04-17 20:09
じゃんぬねっとさま
お手数をおかけします。 仰るとおり、コードを全て見せられたらよいのですが… 実際のコードは会社の業務システムと密接に関連していて、そのクラス関係をみなさまに説明することが困難です。 私としてももどかしいのですが、申し訳ありません。 なお、私の表現が一部あいまいで申し訳ありません。 FormBの任意のボタンをクリックしたことが原因というよりは、FormBのLoadイベントの終了まではブレークポイントがきくが、 それ以降きかなくなると言うべきでした。 私としては、FormBのコンストラクタ内かLoadイベント内のコードに問題があるのだろうか、などと思っています。 (しかし、コードを実行してもこの間に何もエラーとしてあがってきません) ###FormB内のコード Friend Sub New(ByVal prm1 As String, ByVal prm2 As String) MyBase.New() InitializeComponent() Try FormAからの引数を取得、FormBのprivateオブジェクト生成など _obj =new Object(prm1 ,prm2) ←実際は、ここでオブジェクトを作成する際に、 SQLサーバーからデータを取得したり、 そのデータをObjectクラス内で加工したりしている Catch ex As Exception messagebox.show(ex.message) End Try End Sub -------- テスト例 -------------------------------------- じゃんぬねっとさまのご指摘どおり、 確実にコードを通っているか、など試してみました。 テスト@FormBのLoadイベント内を確実に通っているか FormBのLoadイベント内にメッセージを表示させるコードを挿入 Private Sub FormB_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try … データを取得、データグリッドの設定、 フォーム上のコントロールにイベントハンドラを設定、など SetData() MessageBox.Show("Form2を表示しました")←挿入 SetDataFrid() AddHandles() Catch ex As Exception messagebox.show(ex.message) End Try End Sub 結果、挿入したメッセージは表示されました。 テストAFormBのLoadイベント内は確実に止まるか FormBのLoadイベント内にブレークポイントを設定 Private Sub FormB_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try … データを取得、データグリッドの設定、 フォーム上のコントロールにイベントハンドラを設定、など SetData() ←ブレークポイント設定 SetDataFrid() ←ブレークポイント設定 AddHandles() ←ブレークポイント設定 Catch ex As Exception messagebox.show(ex.message) End Try End Sub 結果、いずれもブレークポイントにとまりました。 ちなみに、エラーはありませんでした。 テストBFormBのLoad後のブレークポイントがきくかT FormBのLoad後、FormB上のボタンXをクリックしてみる Private Sub btnButtonX_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnButtonX.Click Try _mode = True←ブレークポイント設定 MessageBox.Show("Modeを切り替えました")←挿入 SetControl()'コントロールのEnabled切り替えなど Catch ex As Exception MessageBox.Show(ex.message) End Try End Sub 結果、メッセージは表示されましたが、_mode = Trueのところでブレークしませんでした。 なお、エラーはありませんでした。 テストCFormBのLoad後のブレークポイントがきくかU FormBのLoad後、FormB上のCloseボタンをクリックしてみる Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click Try Messagebox.Show("フォームを閉じます")←挿入・ブレークポイント設定 Me.Dispose Catch ex As Exception MessageBox.Show(ex.message) End Try End Sub 結果、メッセージは表示されましたが、ブレークしませんでした。 なお、エラーはありませんでした。 以上 | ||||||||
|
投稿日時: 2006-04-17 20:52
ここで MessageBox が表示されているのにブレークしないのはおかしいですね。 いったん、Bin に出来上がったファイルをすべて削除して、'リビルド' して実行してみてください。 確認ですが、FormB が別プロジェクトだったりということはないですよね? また、新規プロジェクトから現状のコードを丸ごとコピペして試してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3
次のページへ»