Member 12496235 Ответов: 2

Передача данных из одной формы в другую


Всем привет.
Я разрабатываю небольшое приложение и думаю передать значение текстового поля из другой формы в другую. Я знаю, как передавать данные непосредственно там, где есть две формы, но в моем случае у меня есть также промежуточная форма ( где пользователь может выбрать наличные деньги или кредитную карту, и в зависимости от выбора, затем открывается форма(frm_cash или frm_credit). После того, как я нажму кнопку OK в одной из форм( ( frm_cash или frm_credit )) Я хочу, чтобы текстовое поле from ( frm_cash или frm_credit ) отображалось в текстовом поле frm1. Если бы кто-нибудь мог мне помочь в этом деле?

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

Ничего не пробовал, потому что знаю, что нужно проходить напрямую, но не тогда, когда есть еще и промежуточная форма

CHill60

Как вы передаете информацию "напрямую"??

[no name]

Form2 fr = новая форма 2();
фр.метод showdialog();
textbox1 = frm.TotalValue;

и в форме 2
Публичное шевеление TotalVlaue();

частная btn_ok недействительным(объект отправителя, EventArgs в электронной)
{
TotalValue = txttotal.Text;
Этот.Располагать();
} Это непосредственно без промежуточной формы

Проблема заключается в том, когда есть промежуточные формы, потому что я не могу установить текстовое поле для ожидания от данных frm2, как это
Form2 fr = новая форма 2();
фр.метод showdialog();
textbox1 = frm.TotalValue;

Поскольку мы не знаем, какая форма откроет форму 3 или форму 4(она зависит от выбора пользователя frm2)

2 Ответов

Рейтинг:
16

Maciej Los

Выполните указанные советы/трюков:
Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[^]

Кстати: вам даже не нужна промежуточная форма! Если вам нужно собрать различные данные в зависимости от выбора пользователя, вы можете создать одну форму, в которой пользователь будет предоставлять соответствующие данные.

Представьте себе, у вас есть Card класс и CardType перечисление, определяющее тип карты:

public enum CardType
{
    None = 0,
    Cash = 1,
    Credit = 2
};

public class Card
{
    string cardNo = string.Empty;
    CardType ct = CardType.Cash;
    string owner = string.Empty;

    public Card(string _cn, CardType _ct, string _owner)
    {
        cardNo = _cn;
        ct = _ct;
        owner = _owner;
    }

    public string Number { get => cardNo; set => cardNo = value; }
    public CardType CardType { get => ct; set => ct = value; }
    public string Owner { get => owner; set => owner = value; }
}



Затем, во второй форме, пользователь должен выбрать тип карты и предоставить информацию о номере карты и ее владельце. Вот и все!
[РЕДАКТИРОВАТЬ]

В случае, когда вы используете 3 формы, и одна из них является основной, вторая-промежуточной, а третья-окончательной, вторая форма должна выступать в качестве диалогового окна.

вторая форма
private CardType result = CardType.None;

public IntermediateForm()
{
    InittializeComponents();
}

public CardType 
{
    return result;
}

//use some event to set result
//if(...)
//result = CardType.Cash;
//else
//result = CardType.Credit;


основная форма
IntermediateForm dlg = new IntermediateForm();
DialogResult ans = ans = dlg.ShowDialog();
if(ans = DialogResult.Cancel) return;
//determine what form to call
CardType ct = dlg.CardType;
if(ct == CardType.Cash)
//call CashForm
else
//call CreditForm


[no name]

@Maciej Los, промежуточная форма-это часть проекта. В промежуточной форме пользователю( продавцу) необходимо выбрать один из способов оплаты наличными или смешанными платежами на основе оплаты клиента. Если бы промежуточная форма не существовала, мне не нужно было бы спрашивать здесь. И ваш приведенный пример не связан с тем, что я спросил, или с проблемой

CHill60

Вы читали статьи по ссылкам? Часть 3 прекрасно описывает вашу ситуацию.

[no name]

Ни один из них не охватывает ситуацию идеально .В этих связях общение происходит между двумя формами( это самый простой способ). Я не знаю, прочитали ли вы вопрос полностью. В этих статьях, которые вы мне показываете, форма один ждет данных из формы 2. Но в моем случае форма один не знает, какая форма откроется (форма 3 или форма 4), потому что есть промежуточная форма( форма 2), где вы выбираете, какая форма откроется

Maciej Los

Что ж...
См. обновленный ответ (после редактирования).

Рейтинг:
0

pdoxtader

Я бы создал класс "транзакция" и использовал его, чтобы содержать всю возможную информацию об этой денежной транзакции. Создайте его экземпляр на первом шаге (форме) вашей транзакции и передавайте его из формы в форму по мере прохождения, добавляя данные в каждую форму.

Таким образом, когда вам нужно отобразить текстовые данные в третьей форме, вы можете просто получить их из объекта транзакции.

Хорошо. создайте свой класс (это очень сыро - просто для примера):

public class Transcation
    {
        public String data1 = "";
        public String dada2 = "";
    }


В форме 1 создайте экземпляр вашего нового объекта:

public partial class Form1 : Form
    {
        private Transcation t = new Transcation();

        public Form1()
        {
            InitializeComponent();
        }

        private void ContinueToNextStep()
        {
            // Update your object's data:
            t.data1 = "some data";

            Form2 f2 = new Form2(t);

            f2.Show();
        }
    }


В последующих формах измените конструктор так, чтобы он принимал ваш объект транзакции, а затем при необходимости получите доступ к данным объекта, например:

public partial class Form2 : Form
    {
        private Transcation t;

        public Form2(Transcation t)
        {
            this.t = t;
            InitializeComponent();
            this.textBox1.Text = t.data1;
        }
    }



Промойте и повторите для каждой формы в вашей цепочке, добавляя данные по мере необходимости и получая доступ к ним, как описано выше.

- Пит


[no name]

pdoxader , любой простой пример, как отобразить данные класса на форме ( после заполнения) , один конец формы 3