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

У меня есть две формы с именем form1 и form2:

  • form1 состоит из label и a button.
  • form2 состоит из textBox и button

Когда я нажимаю кнопку form1, это будет отображаться form2. Любые входы в textBox должны быть записаны на form1.label после нажатия кнопки в form2.
У меня есть код ниже, но он не работает.

// Code from Form 1
public partial class Form1 : Form
{
    public void PassValue(string strValue)
    {
        label1.Text = strValue;
    }
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 objForm2 = new Form2();
        objForm2.Show();
    }

}

// Code From Form 2

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 objForm1 = new Form1();
        objForm1.PassValue(textBox1.Text);
        this.Close();
    }
}

И снимок экрана:

Application screenshot

Как я могу это понять?

Ответ 1

Вы не получаете доступ к своей форме1, из которой вы создали форму2. В form2 button1_Click вы создаете новый экземпляр Form1, который не совпадает с начальным. Вы можете передать свой экземпляр form1 в конструктор form2 следующим образом:

   // Code from Form 1
 public partial class Form1 : Form
{
    public void PassValue(string strValue)
    {
        label1.Text = strValue;
    }
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 objForm2 = new Form2(this);
        objForm2.Show();
    }

}

// Code From Form 2

public partial class Form2 : Form
{
    Form1 ownerForm = null;

    public Form2(Form1 ownerForm)
    {
        InitializeComponent();
        this.ownerForm = ownerForm;
    }

    private void button1_Click(object sender, EventArgs e)
    {       
        this.ownerForm.PassValue(textBox1.Text);
        this.Close();
    }
}

Ответ 2

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

// Code from Form 1
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 objForm2 = new Form2();
        objForm2.PassValue += new PassValueHandler(objForm2_PassValue);
        objForm2.Show();
    }
    public void objForm2_PassValue(string strValue)
    {
        label1.Text = strValue;
    }
}

// Code From Form 2
public delegate void PassValueHandler(string strValue);
public partial class Form2 : Form
{
    public event PassValueHandler PassValue;

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (PassValue != null)
        {
            PassValue(textBox1.Text);
        }
        this.Close();
    }
}

Ответ 3

Когда вы делаете:

Form1 objForm1 = new Form1();
objForm1.PassValue(textBox1.Text);

... вы создаете новый Form1 и вызываете метод PassValue на неправильном объекте Form1. Вместо этого вы можете сделать:

public partial class Form1 : Form
{
    // This is the text that will be entered in form2
    public String form2text;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // Show form2
        Form2 objForm2 = new Form2(this);
        objForm2.ShowDialog();
        // When form2 is closed, update the label text on form1
        label1.Text = form2text;
    }
}

public partial class Form2 : Form
{
    // This is the instance of Form1 that called form2
    private Form1 form1caller;

    public Form2(Form1 form1caller)
    {
        InitializeComponent();
        this.form1caller = form1caller;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // Pass the textBox value to form1 before closing form2
        form1caller.form2text = textBox1.Text;
        this.Close();
    }
}

Ответ 4

Я просто пробовал этот код, и он работает, конечно, это поможет вам.

в первом виде (Form1) ниже:

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f = new Form2(textBox1.Text);
        f.ShowDialog();
    }
}

во второй форме (Form2) используйте ниже коды:

public partial class Form2 : Form
{
    public Form2( string st)
    {
        InitializeComponent();
        textBox1.Text = st;
    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }
}

Ответ 5

Вы можете сделать это:

class Form2
{
    public string ReturnedText = "";

    private void button1_Click(object sender, EventArgs e)
    {
        ReturnedText = textbox1.Text;
        Close();
    }
}

и в форме1

Form2 objForm2 = new Form2();
objForm2.ShowDialog();
string ret = objForm2.ReturnedText;

Ответ 6

Вы должны передать ссылку на form1 в form2 вместо создания нового экземпляра в этом коде:

private void button1_Click(object sender, EventArgs e)
{
    Form1 objForm1 = new Form1(); // ← this is another form1, not that you see
    objForm1.PassValue(textBox1.Text);
    this.Close();
}

Ответ 7

Это то, что вы собираетесь делать:

// Code from Form 1
public partial class Form1 : Form
{
    public string MyValue { get; set; }

    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 objForm2 = new Form2();
        objForm2.textBox1.Text = MyValue;
        objForm2.MainForm = this;
        objForm2.Show();
    }
}

// Code From Form 2

public partial class Form2 : Form
{
    public Form1 MainForm { get; set; }
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MainForm.MyValue = textBox1.Text;
        MainForm.Show();
        this.Close();
    }
}

Ответ 8

Способ, которым я обычно подхожу к этому требованию, выглядит следующим образом:

Я помещаю публичное свойство в класс Form2:

public string ValueFromForm1 { get; set; }

//In the constructor, or other relevant method, I use the value
public Form2()
{
  form2LabelToDisplayForm1Value.Text = ValueFromForm1;
}

Чтобы вернуть что-то в Form1, вам нужно добавить публичное свойство в класс Form1 для получения значения, а затем отправить ссылку на форму в Form2, чтобы Form2 мог установить значение:

//Add reference property to Form2 class
public Form1 CallingForm { get; set; }

//Form2 can access the value on Form1 as follows:
private someMethod()
{
  this.CallingForm.ValueFromForm2 = "Info coming from form 2";
}

затем

//Add public property to Form1 class
public string ValueFromForm2 { get; set; }

//When Form2 is created, set the reference property
Form2 objForm2 = new Form2();
objForm2.CallingForm = this;
objForm2.Show();

Так как Form2 теперь имеет ссылку на Form1, который был создан, нет необходимости вызывать новый Form1() в любом месте Form2. Все, что нужно сделать Form2, это установить значение в ссылке, а затем закрыть.

Ответ 9

Код формы 1: -

namespace Passing_values_from_one_form_to_other    
{

    public partial class Form1 : Form
    {
        string str;
        private String value1;//taking values from form no _of_test_cases

        public string value
        {
            get { return value1; }
            set { value1 = value; }
        }


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {


            textBox1.Text = str;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog();
            str = f2.passvalue;
        }
    }
}

Код формы 2....: -

namespace Passing_values_from_one_form_to_other
{

 public partial class Form2 : Form

    {
         private string str;
        public string passvalue
        {
            get { return  str; }
            set { str = value; }
        }

        public Form2()
        {
            InitializeComponent();
        }

        private void Btn_Ok1_Click(object sender, EventArgs e)
        {

            passvalue = textBox1.Text;
            this.Close();

        }
    }
}

непосредственно выполнить его u получит четкое изображение.... так же u может передавать значения из одной формы в другую...

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

надеюсь, что это поможет...

иначе вы можете ссылаться на это видео...

http://www.youtube.com/watch?v=PI3ad-TebP0