Подтвердить что ты не робот

SplitContainer ISupportInitialize проблема: VS2010 Targeting.NET 3.5

В VS2010 у меня был проект с таргетингом на .NET Framework 4.0, а затем пришлось вернуться к таргетингу v. 3.5. Как только это произошло, объект SplitContainer, который у меня был, не будет отображаться и на самом деле вызовет ошибку: "Невозможно передать объект типа" System.Windows.Forms.SplitContainer "для ввода" System.ComponentModel.ISupportInitialize ".

Теперь я немного поработал и узнал, что 3.5 не имеет, по сути, ISupportInitialize в SplitContainer, и он работает в .NET 4.0. Я думаю, мой вопрос в том, что если я нацелился на 3.5 и все еще получаю эту проблему, как я могу это исправить?

Шаги по воспроизведению проблемы:

  • Создайте новый проект приложения С# для Windows Forms в Visual Studio 2010 (убедитесь, что он предназначен для .NET Framework 4.0)
  • Добавьте разделяемый контейнер в базовую форму.
  • Запустите приложение (будет нормально работать)
  • Изменить цель на .NET Framework 3.5 (properties- > Applications- > Target Framework:)
  • Перезапустите приложение (он будет сбой с исключением Cast).

Любая помощь с этим будет принята с благодарностью!

4b9b3361

Ответ 1

Я нашел решение этой проблемы, и это было совершенно особенное... Если вы вернетесь к своим формам до 3,5, вы должны сделать небольшое изменение в форме КАЖДЫЙ И КАЖДЫЙ, который у вас есть в вашей программе, чтобы компилятор регенерировал все кода для этой формы. Причина, по которой у меня возникла проблема, заключалась в том, что я ничего не изменил и пытался запустить код, который не был восстановлен.

Ответ 2

Как упоминалось в @tomash для удаления строки BeginInit() и EndInit() на этом конкретном элементе управления достаточно.

SplitContainer.BeginInit

.NET Framework Поддерживается в версиях: 4.5, 4

Нажмите здесь для получения дополнительной информации об этом методе.

Ответ 3

Это старый пост, но мне не нравилось каждый раз редактировать файлы дизайнеров, оставляя слишком много места для ошибок.

Я просто подклассифицировал элемент управления и реализовал интерфейс для сборки .net 3.5, как показано ниже, с помощью директив препроцессора.

Просто добавив мой метод, поскольку это сообщение появилось в 2017 году при поиске решения.

    /// <summary>
    /// Split Container Control
    /// </summary>
    public class SplitContainer : System.Windows.Forms.SplitContainer

#if (NET35)
        , ISupportInitialize
#endif

    {
        #region Constructor

        /// <summary>
        /// Constructor
        /// </summary>
        public SplitContainer() : base() { }

        #endregion Constructor

        #region ISupportInitialize Methods

#if (NET35)

        public void BeginInit() { }

        public void EndInit() { }

#endif

        #endregion ISupportInitialize Methods
    }