如何使用事件从类更新TextBox?

时间:2009-06-12 19:46:15

标签: c# winforms events

我想使用正在从类文件处理的数据更新winforms中的表单textbox

实施例

Class.RunProcess();

在RunProcess内部我想触发一个事件,该事件将使用我在win表单上传入的文本更新文本框。

我知道你可以通过事件做到这一点,所以我不必公开textbox或将其传递给我的许多方法,我只是不太确定如何开始。

修改: 也许我只是不清楚。

我有一个带有文本框的窗体。

我有一个运行流程的按钮。

该进程位于表单类之外的类文件中。

在这个过程方法中,我希望能够更新主窗体上的文本框,而不必将TextBox作为参数传递给我将拥有的所有方法(我目前有6个,将会更多)。

我以为我可以订阅一个事件,这个事件可以让我在课程中运行时在文本框中显示一条消息。

3 个答案:

答案 0 :(得分:2)

现在可能需要考虑:

  1. 将文本框数据绑定到您的班级
  2. 模型/视图/演示者(MVP)
  3. 对于#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));
            }
        }
     }
    

    在表单中,您可以通过多种方式将textBox的.Text属性绑定到对象。通过用户界面或代码。

    链接:

    现在,如果您需要添加已存在的文本(例如在您的示例中),您可以跟踪课程中的全文或从课程中提取事件并在表单代码中进行响应。在类中跟踪它会更好 - 你根本不需要表单中的任何逻辑,这会让我们回到绑定和/或某种形式的MVP / MVC。

答案 1 :(得分:1)

如果您希望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;
    }
}

答案 2 :(得分:0)

您可以向构造函数中添加一个参数,该参数是一个TextBox,并将该类中的引用保存为私有变量,并在每个方法中调用该参数。