Не удается изменить метки формы для события - PullRequest
0 голосов
/ 11 ноября 2019

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

        //Watchers
        private static void CDdirWatcher_Created(object sender, FileSystemEventArgs e)
        { 
            CDCreated += 1; 
        }
        private static void LPdirWatcher_Created(object sender, FileSystemEventArgs e)
        { 
            LPCreated += 1; 
        }

Итак, выше приведены события, в которых мои счетчики увеличиваются

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

    private void cdCounterLbl_TextChanged(object sender, EventArgs e)
    { 
        cdCounterLBL.Text = CDCreated.ToString();
    }
    private void lpCounterLbl_TextChanged(object sender, EventArgs e)
    {
        lpCounterLBL.Text = Convert.ToString(LPCreated);
    }

Я пытаюсь

        cdCounterLBL.TextChanged += cdCounterLbl_TextChanged;
        lpCounterLBL.TextChanged += lpCounterLbl_TextChanged;

Я пробовал выше, но ярлыки все еще не меняются

1 Ответ

0 голосов
/ 11 ноября 2019

Спасибо, что нашли время поделиться своей проблемой.

Кажется, вы неправильно поняли, что такое классы, переменные, методы и события и как их использовать.

Это может помочь вам: Как мне улучшить свои знания в C # .

Тем не менее, и если я понял, что вы хотите сделать, это может решить вашу проблему.

TextChanged, для метки, возникает при изменении свойства Text с помощью кода.

Это не потому, что вы изменяете значения своих счетчиков, что какое-то событие будет вызываться для меток.

Счетчики и метки - это две разные вещи, совершенно разные и не связанные, без ссылок, но вы можете связать их следующим образом:

private static void CDdirWatcher_Created(object sender, FileSystemEventArgs e)
{ 
  CDCreated += 1; 
  cdCounterLbl_TextChanged(this, null);
}

private static void LPdirWatcher_Created(object sender, FileSystemEventArgs e)
{ 
  LPCreated += 1;
  lpCounterLbl_TextChanged(this, null);
}

private void cdCounterLbl_TextChanged(object sender, EventArgs e)
{ 
  cdCounterLBL.Text = CDCreated.ToString();
}

private void lpCounterLbl_TextChanged(object sender, EventArgs e)
{
  lpCounterLBL.Text = LPCreated.ToString();
}

Так что это не работает из-за статических методов, и мы имеемплохой дизайн из-за вызова TextChanged для изменения текста.

Вот как это сделать.

Добавить статическое событие:

private static Action CountersUpdated;

Добавить в событие формы Load:

CountersUpdated += DoUpdateCounters;

И в форме FormClosed событие:

CountersUpdated -= DoUpdateCounters;

С:

private void DoUpdateCounters()
{ 
  cdCounterLBL.Text = CDCreated.ToString();
  lpCounterLBL.Text = LPCreated.ToString();
}

Теперь вы можете написать:

private static void CDdirWatcher_Created(object sender, FileSystemEventArgs e)
{ 
  CDCreated++; 
  CallCountersUpdated();
}

private static void LPdirWatcher_Created(object sender, FileSystemEventArgs e)
{ 
  LPCreated++;
  CallCountersUpdated();
}

private static void CallCountersUpdated()
{
  if ( CountersUpdated != null ) CountersUpdated();
}

Вы также можете сделать два события для CDCounterUpdated и LPCounterUpdated вместо одного CountersUpdated.

Иметь хорошую работу и вести хорошую жизнь в C # и OOP.

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