SplitContainer ISupportInitialize проблема: таргетинг VS2010. NET 3.5 - PullRequest
24 голосов
/ 10 мая 2011

В 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 и все еще получаю эту проблему, как мне исправить это?

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

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

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

Ответы [ 3 ]

30 голосов
/ 17 мая 2011

Я нашел решение этой проблемы, и оно было совершенно особенным ... ЕСЛИ вы вернули свои формы к 3.5, вы должны внести небольшое изменение в КАЖДУЮ И КАЖДУЮ форму, имеющуюся в вашей программе, чтобы компилятор обновил все кода для этой формы. Причина, по которой у меня возникла проблема, заключалась в том, что я не внес никаких изменений и пытался запустить код, который не был восстановлен.

6 голосов
/ 27 ноября 2014

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

SplitContainer.BeginInit

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

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

1 голос
/ 23 августа 2017

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

Я только подклассифицировал элемент управления и реализовал интерфейс для сборок .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
    }
...