【问题标题】:How can I update a TextBox from a class using events?如何使用事件从类中更新 TextBox?
【发布时间】:2009-06-12 19:46:14
【问题描述】:

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

示例:

Class.RunProcess();

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

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

编辑: 也许我只是不清楚。

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

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

进程在表单类之外的类文件中。

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

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

【问题讨论】:

  • 我很确定您也可以通过界面公开您的 UI。
  • 为什么要投反对票?如果我对某事不清楚,请在投反对票之前寻求解释。
  • 我之前没有对你投反对票。但是,您应该首先在 EDIT 中写入信息。我只是赞成你的问题。
  • 对不起,我以为我之前很清楚:(

标签: c# winforms events


【解决方案1】:

可能是时候考虑了:

  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));
        }
    }
 }

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

链接:

现在,如果您需要添加到示例中已经存在的文本,您可以跟踪类中的全文或从类中引发事件并以表单代码响应。在课堂上跟踪它会更好——你真的不希望表单中有任何逻辑,这让我们回到绑定和/或某种形式的 MVP/MVC。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 2012-04-02
        相关资源
        最近更新 更多