現在のプロジェクトでは、本質的に同じことを行う 2 つのアプリケーションがあります。最初のアプリケーションの UI では、TreeView コントロールを継承するクラスを開発しました。DrawMode プロパティの OwnerDrawsAll 値を使用して、TreeView の外観をカスタマイズしました。アプリ 1 では、うまく機能し、これ以上ないほど満足しています。数か月間問題がなく、その間頻繁に使用していました。
2 番目のアプリケーションでも同じ変更を行う必要があるため、同じカスタム TreeView クラスを使用しています。アプリ 2 では、TreeView が DrawNode イベントに入る最初の機会に、DrawMode イベント ハンドラーの "Exit Sub" 行に到達するまで、すべて正常に動作します。ステップスルーしようとすると、アプリは警告なしに完全にクラッシュします。「Exit Sub」ステートメントで発生するため、Try/Catch に含めることはできません。DrawNode イベントを発生させるステートメントは、Try/Catch ブロックで囲まれていますが、キャッチされていません。
DrawNode イベント ハンドラーのすべての機能をコメント アウトしましたが、結果は同じでした。以下に含まれるコード:
Public Class TabularTreeView
Inherits System.Windows.Forms.TreeView
Private Sub DrawMyNode(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawTreeNodeEventArgs) Handles MyBase.DrawNode
Try
'Draw the node as default
e.DrawDefault = True
'...commented out and still fails....
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub '<---this statement is where the debugger fails!
End Class
これらのアプリケーションには 2 つの違いがあります。アプリ 1 は、ターゲット プラットフォームとして x86 にコンパイルされたプログラムです。App 2 は、SolidWorks というプログラムのアドインであり、したがって .dll であり、コンパイルされたターゲット プラットフォームは AnyCPU です。カスタム TreeView クラスは、AnyCPU 用にコンパイルされたライブラリにあります。
助けてください!今までの努力を無駄にしたくない!
SH