@ArtemSh51

Как перенести сразу с у нескольких userControl значения из textBox1 в textBox2?

На этой картинке при нажатии на кнопку "Добавить", добавляется userControle, а при нажатии на кнопку "Перенести", программа должна переносить значения из textBox1 в textBox2. Но как видно из программы она переносит только у последнего userControl значение
6425b0acbfa1a433919504.png
Код кнопки:
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 static System.Windows.Forms.VisualStyles.VisualStyleElement.Button;

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

        private void button1_Click(object sender, EventArgs e)
        {
            int offsetY = 5;
            int x = 12;
            int y = 12;
            int index = 1;
            foreach (UserControl1 oldB in Controls.OfType<UserControl1>())
            {
                x = oldB.Location.X;
                y = Math.Max(y, oldB.Location.Y + oldB.Height);
                index++;
            }

            UserControl1 user = new UserControl1();
            user.Location = new Point(x, y + offsetY);
            Controls.Add(user);
        }
        public static Delegate Numvalue;

        private void button2_MouseClick(object sender, MouseEventArgs e)
        {
            Numvalue.DynamicInvoke("1");
        }
    }
}

Код UserControl:
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;

namespace ProjTest
{
    public partial class UserControl1 : UserControl
    {
        public delegate void numvaluefunc_(string vlu);
        private event numvaluefunc_ numf_;
        public UserControl1()
        {
            InitializeComponent();
            comboBox1.SelectedIndex = 0;
            numf_ += new numvaluefunc_(numric);
            Form1.Numvalue = numf_;
        }

        private void numric(string vlu)
        {
            textBox2.Text = textBox1.Text;
        }
    }
}
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
yarosroman
@yarosroman Куратор тега C#
C# the best
1. Ну так когда вы новый контрол добавляете, каждый раз Form1.Numvalue присваивается новый делегат.
2. Нафига так сложно то? Делегат, событие, еще делегат. Сделайте у контрола публичную функцию переноса и через foreach дергайте ее у всех контролов. Бинго.
3. На будущее, не делайте зависимость у контрола от какой-то формы, контрол вообще не должен знать о форме.
4. И вообще в WinForm появился нормальный MVVM, https://devblogs.microsoft.com/dotnet/winforms-cro... и еще https://github.com/abravodev/winforms-mvvm
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы