重新填充C#中其他类的表单字段

时间:2019-10-30 13:01:15

标签: c# class reference

我正在尝试从单独的类中重新填充文本框。我浏览了相同问题的多个实例,发现我认为这是一个很好的解决方案。但是,我无法使其工作。我试图通过创建一个单独的线程来将数据发送回来解决该问题。我不知道这是一个好主意。但是,我知道没有它,数据就会回到正确的位置,因为它会显示在控制台中。有什么建议么?谢谢!

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void updater(double value)
    {
        textBox1.Text = value.ToString(); // Trying to update here
        Console.WriteLine(value);  // The new multiple makes if back to here...
    }

    private void button1_Click(object sender, EventArgs e)
    {
        CALC c = new CALC();
        c.valuecalculator(.0025);
    }
}

public class CALC
{
    public void valuecalculator(double multiplier)
    {
        for (int index = 0; index < 1000; index++)
        {
            Form1 f = new Form1();
            double newMultiple = index * multiplier;
            f.updater(newMultiple);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您正在使用valuecalculator方法创建表单的新副本,但是应该使用相同的表单。

有很多方法可以解决这个问题。

您可以将表单的实例传递到valuecalculator方法中。

您可以在Program.cs或最初初始化它的任何启动文件中对静态表单进行引用。

您可以为表单提供对自身的引用

您可以通过使valuecalculator返回结果而不是返回void来在button1 click事件中放置代码以更新表单(这很有意义)

答案 1 :(得分:0)

您的组件只能做一件事。计算器应执行计算并返回结果:

public static class Calc
{
    public static double CalculateValue(double multiplier)
    {
        return 100 * multiplier;
    }
}

表格应尽可能简单。意味着他们只关心显示表单元素并将事件传递给事件处理程序。这些事件处理程序中发生的实际逻辑应由其他人负责。我喜欢在构造函数中传递此逻辑:

public partial class Form1 : Form
{
    public Form1(Func<double, double>CalculateValue)
    {
        InitializeComponent();
        button1.Click += (sender, eventArgs) => textBox1.Text = CalculateValue(.0025).ToString();
    }

}

构造和相互连接类是另一个责任。最简单的版本是使用Main()方法:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var form = new Form1(Calc.CalculateValue);
        Application.Run(form);
    }
}
相关问题