我想在C#中使用winform MVP模式进行数字增量

问题描述 投票:0回答:1

嗨,我正在练习在C#中使用winform MVP模式。

我制作了模型,演示者和视图文件夹,每个班级都有。 (模型有Data.cs,Presenters有Datapresenter.cs,View有interface.cs和Form.cs)

我使用'FlowLayoutPanel'。我制作了Label来制作数字。像这样。

我到目前为止的进展。

WinForm我做了。

这是Data.cs(模型)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LayoutSample.Models
{
    public class Data
    {

        public string label { get; set; }

        public string CalculateArea()
        {
            return label;
        }
    }
}

这是DataPresenter.cs(演示者)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;

using LayoutSample.Models;
using LayoutSample.Views;

namespace LayoutSample.Presenters
{
    public class DataPresenter
    {
        IFlowLabel LabelView;

        public DataPresenter(IFlowLabel view)
        {
            LabelView = view;
        }

        public void CalculateArea()
        {
            Data data = new Models.Data();
            data.label = string.Copy(LabelView.label);
            var th = new Thread(() =>
            {
           for ( int i = 1; i < 101; i++)
           {
               for (int j=1; j<101;j++)
               {
                   Label label = new Label();
                   label.Text = j.ToString();              
                   Console.WriteLine(label);
               }
               Thread.Sleep(1000);
           }
       });
            th.Start();
        }
    }
}

这是interface.cs(查看)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LayoutSample.Views
{
    public interface IFlowLabel
    {
        string label { get; set; }

    }
}

这是Form.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using LayoutSample.Models;
using LayoutSample.Presenters;
using LayoutSample.Views;

namespace LayoutSample
{
    public partial class Form1 : Form, IFlowLabel
    {
        public Form1()
        {
            InitializeComponent();
        }


        string IFlowLabel.label
        {
            get
            {
                return flowLayoutPanel1.ToString();
            }

            set
            {
                if (flowLayoutPanel1.InvokeRequired)
                {
                    flowLayoutPanel1.Invoke(new MethodInvoker(() =>
                    {
                        flowLayoutPanel1.Text = value;
                    }));
                }
                else
                {
                    flowLayoutPanel1.Text = value;
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                Label label = new Label();
                label.AutoSize = false;
                label.Width = 50;
                label.Text = i.ToString();
                flowLayoutPanel1.Controls.Add(label);
            }
            DataPresenter presenter = new DataPresenter(this);
            presenter.CalculateArea();
        }
    }
}

从这里开始,我想让数字增加。

我怎么能同时增加它们?

我可以通过控制台观察数字增加,但我看不到WimForm的变化。如何将增量添加到WinForm与控制台的结果相同?

c# winforms label mvp flowlayoutpanel
1个回答
0
投票

您无法增加数字,因为数字是硬编码的,并从下面的代码应用于标签。特别是for循环i.ToString()。

private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                Label label = new Label();
                label.AutoSize = false;
                label.Width = 50;
                label.Text = i.ToString();
                flowLayoutPanel1.Controls.Add(label);
            }
            DataPresenter presenter = new DataPresenter(this);
            presenter.CalculateArea();
        }

如果你想增加字符串包含的值,那么你必须对标签文本本身做一些事情,我不知道你在哪里递增值并在控制台中看到它。

label.Text = i.ToString() + addedValue;

如果标签被更改,请尝试调用表单刷新方法。

© www.soinside.com 2019 - 2024. All rights reserved.