Member 12972565 Ответов: 1

Как сохранить значения списка делегатов в другой форме


У меня есть основная форма, которая имеет кнопки n, когда я нажимаю на кнопку one form 1 и аналогичную ей форму 2, когда нажимается кнопка 2
Таким образом, я смог передать значение из формы 1 в форму 2, но когда форма 1 закрыта, значения возвращаются к 0

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

Публичный делегат void abc(list & lt;string > p1)

Форма 2 f =новая форма 2();
Abc del =new Abc(f. Fpass) ;
Del (lst) ;

В Форме 2

Public void Fpass (list<string > p2) {pvalue. Добавить (p2. Метод toArray() ) ;
}

Graeme_Grant

Что ты пытаешься сделать?

Member 12972565

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

Graeme_Grant

а почему бы и нет? быстрый поиск в google показывает, что это популярное решение.

Member 12972565

Я попробовал... К сожалению, я не смог их найти, поэтому написал здесь

Graeme_Grant

Серьезно??? поиск Google: winform передача переменных между формами[^]

BillWoodruff

Вам нужно опубликовать код, в котором нет ошибок, которые я вижу здесь, которые указывают на то, что вы не вводили его с помощью Visual Studio, где синтаксические ошибки будут выделены при вводе.

Публикуйте фактический код с сообщениями об ошибках.

Неясно, сколько существует форм и какая из них является основной формой приложения.

1 Ответов

Рейтинг:
2

Graeme_Grant

Выше приведена ссылка на поиск Google о том, как передавать переменные в конструктор формы...

В качестве альтернативы, если этот подход не подходит, т. е. значения должны быть переданы после инициализации, то следующий пример сделает свое дело:

Вторая форма (приемник):

using System.Windows.Forms;

namespace WFPassVariablesBetweenForms
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public void SetValue(string text)
        {
            textBox1.Text = text;
        }
    }
}


Основная Форма (Отправитель):
using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;

namespace WFPassVariablesBetweenForms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var xxx = new Form2();
            xxx.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var xxx = Application.OpenForms.Cast<Form>().Where(x => x.Name == "Form2").FirstOrDefault();
            ((Form2)xxx).SetValue(textBox1.Text);
        }
    }
}
Опасность с этим раствором заключается в том, что он крепко связан. Может быть рефакторинг для свободной зависимости, но это не является целью данного примера.


BillWoodruff

Когда запрос настолько запутан, я не вижу, насколько "экзотический" код похож на этот:

var xxx = приложение.Открытые формы.Бросать().Где (x => x.Name = = "форма 2").Метода firstordefault();
((Форма 2) возможно ).Метод setValue(текстовое поле textbox1.Текст);

Может помочь ОП.

Graeme_Grant

"экзотика"? простой запрос Linq... Ничего там экзотического... Переменное имя xxx можно было бы назвать лучше, но оно быстро вытеснилось.

Создайте проект с двумя формами, Form1 с текстовым полем и кнопкой, form2 с текстовым полем, вставьте код и запустите ... данные передаются из одной формы в другую, и выводится текстовый результат.