usercontrol добавление другого usercontrol программно во время разработки - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть пользовательский контроль (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.

1 Ответ

0 голосов
/ 28 апреля 2011

Проблема в том, что ваш первый UserControl размещен на VS, поэтому он знает, что находится в режиме разработки. Второй UserControl размещается в первом UserControl, так как его хост не является Designer, он считает, что он находится в обычном контейнере и ведет себя соответственно Как решить это немного сложно, так как не существует простого решения AFAIK. Здесь вы можете найти некоторые обходные пути. Другим может быть рекурсивное тестирование Site.DesignMode, но это зависит от уровня глубины ваших элементов управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...