Как я могу обновить TextBox из класса, используя события? - PullRequest
3 голосов
/ 12 июня 2009

Я хотел бы обновить textbox формы в winforms с данными, которые обрабатываются из файла класса.

Пример:

Class.RunProcess();

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

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

Редактировать : Может быть, я просто не ясно.

У меня есть форма окна с текстовым полем.

У меня есть кнопка, которая запускает процесс.

Процесс находится в файле класса вне класса формы.

Внутри этого метода процесса я бы хотел иметь возможность обновлять текстовое поле в главной форме, не передавая TextBox в качестве параметра всем методам, которые у меня будут (у меня сейчас 6 и будет больше).

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

Ответы [ 3 ]

2 голосов
/ 13 июня 2009

Пора, наверное, подумать:

  1. Привязка данных вашего текстового поля к вашему классу
  2. Модель / Вид / Ведущий (MVP)

Для # 1 (привязка данных) вы можете использовать интерфейс INotifyPropertyChanged в своем классе и вызвать событие для измененных свойств.

public class BusinessModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private int _quantity;
    public int Quantity
    {
        get { return _quantity; }
        set 
        { 
            _quantity = value;
            this.OnPropertyChanged("Quantity");            
        }
    }

    void OnPropertyChanged(string PropertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
        }
    }
 }

И в вашей форме вы можете привязать свойство .Text textBox к объекту несколькими способами. Через пользовательский интерфейс или в коде.

Ссылки:

Теперь, если вам нужно добавить к уже существующему тексту, как в вашем примере, вы можете либо отслеживать полный текст в классе, либо вызывать события из вашего класса и отвечать в коде формы. Отслеживание этого в классе было бы лучше - вы действительно не хотите никакой логики в форме, что возвращает нас к привязке и / или некоторой форме MVP / MVC.

1 голос
/ 13 июня 2009

Если вы хотите, чтобы Class.RunProcess запускался при запуске события из внешнего класса, тогда вы можете сделать это следующим образом

public delegate void MyDelegate();

public class MyClass
{
    public event MyDelegate Myevent;

    public void DoSomething()
    {
        this.Myevent();
    }
}
public static class Class
{
    public static void RunProcess()
    {
        txtData.Text += "Message";
    }
}
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        MyClass myClass = new MyClass();
        myClass.Myevent += Class.RunProcess;
    }
}
0 голосов
/ 13 июня 2009

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

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