Member 13680689 Ответов: 2

Счетчик кликер с 2 встречными формы и одна главная с#


это для системы массового обслуживания. При нажатии следующей кнопки, которая находится в frmCounter1 и frmCounter2, номер приращения должен быть обработан в их предпочтительном текстовом поле, которое находится в основной форме.

Что я уже пробовал:

//counter1
namespace QueuingSystem
{
    public partial class Counter1 : Form
    {
        int count = 0;
        Main view = new Main();
        public Counter1()
        {
            InitializeComponent();
        }
        
        private void btnNext1_Click(object sender, EventArgs e)
        {
            count++;
            label1.Text = count.ToString();
            view.label4.Text = count.ToString();
        }

        private void Counter1_Load(object sender, EventArgs e)
        {
            view.Show();
        }
    }
}



//counter2
namespace QueuingSystem
{
    public partial class Counter2 : Form
    {
        int count = 0;
        Main view = new Main();
        public Counter2()
        {
            InitializeComponent();
        }
        private void btnNext2_Click(object sender, EventArgs e)
        {
            count++;
            label1.Text = count.ToString();
            view.label5.Text = count.ToString();
        }

        private void Counter2_Load(object sender, EventArgs e)
        {
            view.Show();
        }
    }
}

BillWoodruff

Есть много способов реализовать это, но, во-первых, пожалуйста, уточните:

1. это приложение WinForm ? Какова здесь основная форма ? Где создаются экземпляры "встречных форм"?

2. Почему вы используете несколько форм ?

3. "номер инкремента должен быть обработан в их предпочтительном текстовом поле, которое находится в основной форме". пожалуйста, расскажите подробнее о том, что происходит в этой форме/

4. реализовали ли вы логику очереди ?

2 Ответов

Рейтинг:
2

OriginalGriff

Избавьтесь от ссылки на вашу основную форму, это плохая идея - и она не будет работать, так как это другой экземпляр формы, а не тот, который вы показываете.

Вместо этого используйте события, чтобы "сказать" основной форме, что дочерняя форма что-то сделала и нуждается во внимании: Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^]
Это может показаться сложным, но на самом деле это не так - это точно такой же механизм, который вы используете все время для обработки кнопок, текстовых полей и всего остального в ваших формах.


Рейтинг:
16

RickZeeland

Вместо использования событий, что является обычным способом, вы также можете просто поместить свою переменную count в Программа как Static переменная.
Тогда вы можете просто ссылаться на него как: Program.count в ваших формах, например:

using System;
using System.Windows.Forms;

namespace QueuingSystem
{
    static class Program
    {
        public static int count = 123;

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

И в твоей форме:
using System.Windows.Forms;

namespace QueuingSystem
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Text = Program.count.ToString();
        }
    }
}


Member 13680689

я понимаю это, но не знаю как. могу я получить несколько кодов для этого?

RickZeeland

Обновил решение с помощью примера !