Я хочу увеличить число, используя шаблон MVP winform в C # - PullRequest
0 голосов
/ 14 марта 2019

Привет, я тренируюсь, используя шаблон MVP winform в C #.

Я создал папки Models, Presenters и Views, и у них есть каждый класс. (В моделях есть Data.cs, ​​в Presenters - Datapresenter.cs, а в View - interface.cs и Form.cs)

Я использовал FlowLayoutPanel. и я сделал лейбл, чтобы сделать числа. Вот так.

Мой прогресс до сих пор.

Form what I made

Вот 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 = 0; i < 100; i++)
                {
                    Label label = new Label();
                    Panel flowLayoutPanel1 = new Panel();
                    label.Text = i.ToString();
                    flowLayoutPanel1.Controls.Add(label);
                    Thread.Sleep(10);
                }
            });
            th.Start();
        }
    }
}

Вот интерфейс.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();
        }
    }
}

Отсюда я хочу, чтобы числа увеличивались.

Как я могу увеличить их одновременно?

p.s Я изменил DataPresenter.cs

Я провалил публичную пустоту. Рассчитать площадь () до

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

Я могу наблюдать за увеличением чисел через консоль, но не вижу изменений в WimForm. Как я могу принести приращение в WinForm ??

...