У меня есть пользовательский контроль (UC1), который изменяет аспект во время разработки в соответствии с тем, что пользователь хочет показать.
- Обычная кнопка, которая открывает окно с usercontrol UC2 (окно отображается только во время выполнения)
- UC2, непосредственно расположенный в UC1 (обычная кнопка тогда не отображается)
Поскольку я хочу использовать один и тот же экземпляр UC2 в обеих ситуациях, я просто передаю право собственности между UC1 и формой.
public UC1 ()
{
_uc2 = new UC2 ();
}
public bool DisplayModeSimple
{
get { return _displayModeSimple; }
set
{
_displayModeSimple = value;
if (_displayModeSimple)
{
// ... Verify if _uc2 is already in Controls...
Controls.Remove (_uc2);
uiButton.Visible = true;
}
else
{
// ... Verify that _uc2 is not in Controls ...
Controls.Add (_uc2);
uiButton.Visible = false;
}
}
}
private void HandleButtonClick (object sender, EventArgs e)
{
// Not called if DisplayModeSimple=false since button is hidden...
using (var form = new PopupForm (_uc2))
{
form.ShowDialog (this);
}
}
Прекрасно работает как в режиме разработки, так и в режиме исполнения.
В режиме разработки, если я изменяю режим отображения, UC1 ведет себя корректно.
Однако, элементы управления, которые находятся на UC2, можно щелкать, как если бы это было время выполнения.
Если я затем закрою форму, на которой размещен UC1, и снова открою ее, все вернется в нормальное состояние, то есть я не смогу «щелкнуть» ни по одному из элементов управления в UC2.