Как вызвать методы UserControl из Windows.Form - PullRequest
0 голосов
/ 09 октября 2018

Форма имеет кнопку и панель с UserControl, которая имеет ListBox и TextBox.

Когда я нажимаю кнопку Windows.Form, она вызывает UserControl's Add ()

listBoxTitles.Items.Add(metroTextBoxTitles.Text);
metroTextBoxTitles.Clear();

, который просто добавляет все, что имеет UserBontrol TextBox.Text, в список UserControl ListBox.

Почему-то ничего не происходит, когда я нажимаю кнопку.
Почему.Ничто в UserControl не может быть изменено или использовано?Или это меняется, но не обновляется / не показывает, что происходит?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Итак, что происходило, когда вы создавали UserControl и добавляли его в Window.Form, дизайнер формы уже инициировал этот UserControl:

private UserControl userControl1; 

Итак, чтобы решить проблему, мне просто нужно былоиспользовать UserControl, созданный дизайнерским кодом:

usercontrol1.add();

И все работает отлично.

0 голосов
/ 09 октября 2018

Лучший способ справиться с коммуникацией между контейнерами - реализовать класс наблюдателя.

Шаблон наблюдателя - это шаблон проектирования программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых, называемых наблюдателями.и автоматически уведомляет их о любых изменениях состояния, обычно вызывая один из их методов.(википедия)

то, как я это делаю, создает класс Observer:

1    public delegate void dlFuncToBeImplemented(int signal);
2    public static event dlFuncToBeImplemented OnFuncToBeImplemented;
3    public static void FuncToBeImplemented(int signal)
4    {
5         OnFuncToBeImplemented(signal);
6    }

так в основном: первая строка говорит, что будет функция, которую кто-то другой реализует

вторая строка создает событие, которое происходит, когда делегированная функция вызывает

, а третья строка - создание функции, которая вызывает событие

, поэтому в вашем UserControl вы должны добавитьфункционируйте так:

private void ObserverRegister()//will contain all observer function registration
{
    Observer.OnFuncToBeImplemented += Observer_OnFuncToBeImplemented;
    /*and more observer function registration............*/
}


void Observer_OnFuncToBeImplemented(int signal)//the function that will occur when  FuncToBeImplemented(signal) will call 
{
    MessageBox.Show("Signal received!", "Atention!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}

и в вашей форме вы должны сделать что-то вроде:

public static int signal = 0;

public void button1_Click(object sender, EventArgs e)
{
      Observer.FuncToBeImplemented(signal);//will call the event in the user control
}

, и теперь вы можете зарегистрировать эту функцию для целого ряда других элементов управления и контейнеров иони все получат сигнал

Надеюсь, это поможет:)

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