我有一个usercontrol(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中的任何控件。
答案 0 :(得分:0)
问题是您的第一个UserControl托管在VS上,因此它知道处于设计模式。第二个UserControl托管在第一个UserControl中,因此它的主机不是Designer,它认为是在一个普通的容器中并且相应地运行。如何解决这个问题有点棘手,因为没有简单的解决方案AFAIK。 Here你可以找到一些解决方法。另一个可能是递归地测试Site.DesignMode,但它取决于控件的深度级别。