コードビハインドでユーザーコントロールを作成し、そのコントロールのイベントに応答しようとしています。おそらく、コンパイル時にコントロールが存在しないため、Visual Studioは、コントロールのイベントをキャッチするために作成したハンドラーサブルーチンをコンパイルできません。重要なのは、実行時にコントロールのタイプを決定したいということです(これが、単にハードコーディングしているのではない理由です)。
[先に進む前に、XAMLでコントロールを作成する「通常の」方法で使用される場合のイベントやイベントハンドラーなど、コントロールは正しく機能します。99%同一のページの重複を避けるために、コードビハインドでコントロールインスタンスを作成したい]
この「動作」(ただし、必要な柔軟性は得られません):
Public WithEvents AnswerPanel As MyControls.ScrollerControl
...(およびNew()サブでの初期化):
AnswerPanel = New MyControls.ScrollerControl
ItemStack3.Children.Add(AnswerPanel)
AddHandler AnswerPanel.GuessMade, AddressOf CheckAnswer
...(これは、ScrollerControlのカスタムイベントに応答するハンドラーサブです)
Public Sub CheckAnswer(answer As String) Handles AnswerPanel.GuessMade
上記のコードを使用すると、すべてが期待どおりに機能します。コントロールは実行時に作成され、そのイベントは正しく処理されます。
私が達成したいのは、コントロールを初期化するときに別のユーザーコントロール(たとえば、ScrollerControl2、ScrollerControl3など)を選択できるようにすることです。最初の行を次のように変更することで、この方法でコントロールを作成できます。
Public WithEvents AnswerPanel As UserControl
しかし、その変更が行われると、(おそらく)コンパイラーがカスタムGuessMadeイベントを含まない汎用UserControlと見なすため、ハンドラーでカスタムイベントを参照できなくなります。コンパイラはイベント名にエラーがあり、存在しないと通知します。
私はここで何か間違ったことをしていると確信しています。私のコードではなく、理論/概念の問題だと思います。
私は正しい方向に進んでいますか、それとも間違った方法でこれを行っていますか?