お世話になっています。
2点追加で質問があります。
(1)
ControlAddedとControlRemovedで
ルートUserControlを起点に子UserControlを再帰検索し、
子UserControlがあったら・・・という処理を書きました。
-------------------------------------------------------------------------
/// <summary>LstUserControlに追加する</summary>
/// <param name="cntrl">UserControl</param>
private void UserControlAdded(UserControl cntrl)
{
// 動的ロード後のコントロール検索&イベントハンドラ設定
this.LstUserControl.Add(cntrl);
// 子要素にユーザーコントロールがあるかチェック
this.CheckUserControls(cntrl);
}
/// <summary>子コントロールのUserControlをチェック</summary>
/// <param name="cntrl">UserControl</param>
private void CheckUserControls(Control cntrl)
{
// 子コントロール毎に
foreach (Control childCtrl in cntrl.Controls)
{
switch (childCtrl)
{
// ユーザーコントロールがあれば
case UserControl userCtrl:
// UserControlAddedを再起する。
UserControlAdded(userCtrl);
break;
case null:
break;
default:
// 子コントロールがある時
if (childCtrl.Controls.Count != 0)
{
// 再起してさらに子コントロールもチェック
CheckUserControls(childCtrl);
}
break;
}
}
}
-------------------------------------------------------------
これを追加すると、気になるレベルで
画面表示までの処理に時間がかかるようになりました。
Open棟梁でも
RcFxCmnFunction.GetCtrlAndSetClickEventHandler2
で全コントロールを見ているので
同じループ内に組み込むことはできますか?
(2)
LstUserControlに無事に子UserControlをAddできた後の
子UserControl上のボタン押下時の処理についてです。
ボタン押下時処理は、子UserControlに記述されています。
以下のような場合
ルートUserControl上のPanel上の子UserControl

https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Framework/RichClient/Presentation/BaseControllerWin.cs#L912
FindUCControlの部分で、ルートUserControl上の子UserControlは検索せずにスルーするのですが
Panelなどのコントロールにさらに入れ子になっている場合
retが取得されretがnullでなくなるため
ルートUserControl上にあると判定されてしまっているためか
その後にUOCメソッドをルートUserControlから探しており
ボタンイベント処理が発生していません。
おそらく上記であっているとは思いますが
確認のほどよろしくお願いします。
2017年9月14日木曜日 11時36分35秒 UTC+9 daisukenishino: