Медленная навигация при наследовании от базовой формы - PullRequest
0 голосов
/ 19 мая 2019

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

По сути, эта форма называется StudentBase.cs

Затем у меня есть другая форма, называемая StudentProfile, которая наследуется от StudentBase

    public partial class StudentProfile : StudentBase
    {
       public string selectedPage;
    }

Затем она наследует меню, которое находится в StudentBase, и мне не нужно заново делать меню.

В меню есть кнопки для отдельных форм.

Итак, скажем, я нажимаю на профиль студента. Я использую это для навигации:

    private void btnProfile_Click(object sender, EventArgs e)
    {
          //I don't want the page to reload if it is the current page
          if (selectedPage != "Profile") 
          {
             StudentProfile profile = new StudentProfile();
             profile.Show();
             this.Hide();
          }      
    }

Это дает очень запоздалый результат, а также выглядит очень глючно

Я переопределяю selectedPage в дочерних формах, поэтому в случае StudentProfile я использую:

   private void StudentProfile_Load(object sender, EventArgs e)
    {
        selectedPage = "Profile";
    }

Я проверил это на коде моего друга, и его навигация работает без задержек или сбоев.Он не делал наследство в форме

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Проблема с вашим решением наследования заключается в том, что при создании экземпляра StudentProfile вы также создаете экземпляр формы StudentBase. Вы показываете этот новый экземпляр и скрываете старый. Теперь у вас есть два экземпляра StudentBase (один видимый, а другой скрытый). Когда вы открываете больше форм из вашего меню, вы получаете больше экземпляров StudentBase в памяти. Даже если они скрыты, они все еще потребляют ресурсы. Это объяснило бы результат, который вы видите.

Я предлагаю вам поступить как друг, что, кстати, является типичным способом обработки дочерних форм из главного меню.

0 голосов
/ 26 мая 2019

Итак, я не мог правильно понять, как использовать UserControls. Я включил его в свой список дел, чтобы я мог попробовать это в конце проекта, если у меня еще есть время.

Но я понял, почему переход от одной навигации к другой занял так много времени.

Я выбирал данные студента в базовой форме, используя

Student student = new Student();
Student studentDetailsFound = student.GetStudent(2);

Я никогда не мешал ему выбирать из базы данных каждый раз, когда он переходит на новую форму, таким образом, задержка в две секунды каждый раз. Таким образом, было два варианта, чтобы это исправить: Статические переменные или кэширование .

Я использовал последний, и теперь он довольно быстро переключается на страницы.

Добавив переход к форме, он стал более гладким для глаз.

Также обратите внимание : если вы получаете данные, такие как я, вам следует сначала дождаться завершения разработки формы. Поэтому поместите часть GetStudent в это, если:

if (this.Site == null || !this.Site.DesignMode)
{
    studentDetailsFound = GetStudent();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...