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

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

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

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

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

WinForm, который я сделал.

WinForm 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 (Presenter)

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 (View)

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 так же, как результат консоли ??

1 Ответ

0 голосов
/ 15 марта 2019

Вы не можете увеличить числа, потому что числа жестко закодированы и применены к меткам из кода ниже. В частности, для циклов 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;

Попробуйте вызвать метод обновления форм, если метки изменены.

...