Проблема с Tabcontrol в разных платформах.NET

Я разработал приложение Winforms C# два года назад, используя Visual Studio 2010 (целевая среда: .NET Framework 4 Client Profile).

Это приложение имеет Form1: Form, INotifyPropertyChanged с tabcontrol с несколькими вкладками. Я связал пользовательские свойства своей формы с элементами управления, которые находятся на вкладках, которые не видны при создании формы. Привязки такие:

BindingSource BndFrom1 = new BindingSource();
BndFrom1.DataSource = typeof(Form1);
BndFrom1.Add(this);

TxtTemperature.DataBindings.Add("Text", BndFrom1, "TemperatureString", true, DataSourceUpdateMode.OnPropertyChanged);

Это работало нормально. После перехода на Windows 10 с.NET Framework 4.6 приложение неожиданно перестало работать нормально, стало медленным или полностью зависло при переходе на другую вкладку. Если я менял порядок вкладок, это всегда была первая страница, которая работала нормально. Я попытался "заставить" Form1 создать невидимые элементы управления, вызвав

private static void CreateControls(Control control)
        {
            CreateControl(control);
            foreach (Control subcontrol in control.Controls)
            {
                CreateControl(subcontrol);
            }
        }
        private static void CreateControl(Control control)
        {
            var method = control.GetType().GetMethod("CreateControl", BindingFlags.Instance | BindingFlags.NonPublic);
            var parameters = method.GetParameters();

            method.Invoke(control, new object[] { true });
        }

на всех вкладках, но это не сработало.
После того, как я удалил все привязки данных с элементами управления на вкладках, проблема была решена.

У меня была первая версия моего приложения с привязками данных, все еще работавшая с propper на ПК с Windows 7. Но после обновления до.NET Framework 4.7 у него возникли те же проблемы, и после установки новой версии приложения оно исчезло.

Является ли это известной проблемой, и если да, есть ли объяснение и решение для нее? У кого-нибудь есть лучшее решение, с помощью которого я могу продолжать использовать привязки?

Заранее спасибо,

электрический

1 ответ

Мы пытались воспроизвести эту ошибку, но безуспешно. Не могли бы вы поделиться примером приложения, которое продемонстрирует проблему? Вот что мы сделали: 1. Создаем приложение winforms 2. Добавьте метку и вкладку с двумя вкладками в форму 3. Добавьте текстовое поле на вторую вкладку в вкладке управления 4. Метка привязки данных в форме к свойству в форме, где свойство отражает содержимое текстового поля на второй вкладке. Видите ли вы, чего не хватает в этой попытке воспроизведения по сравнению с вашим кодом? Мы также экспериментировали с привязкой данных к базе данных SQL. И не увидел никакой разницы на 4.0 и 4.7 версиях фреймворка.

Вот код Form1.cs:

using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Forms;

namespace WindowsFormsApp5
{
    public partial class Form1 : Form, INotifyPropertyChanged
    {
        public Form1()
        {
            InitializeComponent();

            BindingSource bindingSource = new BindingSource();
            bindingSource.DataSource = typeof(Form1);
            bindingSource.Add(this);

            label1.DataBindings.Add("Text", bindingSource, "CustomProperty1", true,
                DataSourceUpdateMode.OnPropertyChanged);
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public string CustomProperty1 {
            get { return textBox1.Text; }
            set {
                NotifyPropertyChanged();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.Text = "thing1";
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            NotifyPropertyChanged("CustomProperty1");
        }
    }
}

Спасибо таня

Другие вопросы по тегам