Ввод данных в основную форму

#c# #windows #winforms #label

#c# #Windows #winforms #метка

Вопрос:

введите описание изображения здесьЯ создал приложение. Имя основной формы — Form1. А другая форма называется PoP.

 public partial class pops : Form
{
    public pops()
    {
        InitializeComponent();
        CenterToScreen();
    }

    private void pops_Load(object sender, EventArgs e)
    {
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Close();
    }

    private void lblAdminNo_Click(object sender, EventArgs e)
    {
    }
}
  

Комментарии:

1. Хорошая картинка, но что вы пробовали?

Ответ №1:

Создайте два общедоступных свойства во всплывающей форме и извлеките их из родительской формы.

 string username = string.Empty;
string password = string.Empty;

using (LoginForm form = new LoginForm ())
 {
     DialogResult result = form.ShowDialog();
     if (result == DialogResult.Ok)
     {
         username = form.Username;
         password = form.Password;
     }
 }
  

Ответ №2:

Все зависит от того, откуда вы вызываете всплывающую форму.

Если он вызывается из самой Form1, то объект Popform сам предоставит вам значение.

 Pop popFrm = new Pop();
if(popFrm.ShowDialog() == Ok)
{
   string userName = popFrm.TextBox1.Text;
}
  

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

Ответ №3:

Это можно сделать с помощью событий. Этот подход особенно полезен, когда данные должны быть размещены, даже когда дочерняя форма остается открытой.

Метод заключается в том, чтобы из родительской формы подписаться на дочернюю из события. Запускает событие при закрытии дочерней формы для отправки данных

—— ПРИМЕР КОДА——

Примечание: В родительской форме добавьте кнопку:button1

 namespace WindowsFormsApplication2
{

 public delegate void PopSaveClickedHandler(String text);

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

  private void button1_Click(object sender, EventArgs e)
  {
   Pops p = new Pops();
   p.PopSaveClicked  = new PopSaveClickedHandler(p_PopSaveClicked);//Subscribe
   p.ShowDialog();
  }

  void p_PopSaveClicked(string text)
  {
   this.Text = text;//you have the value in parent form now, use it appropriately here.
  }
 }
  

Примечание: В всплывающей форме добавьте текстовое поле:txtUserName и кнопку:btnSave

  namespace WindowsFormsApplication2
{
 public partial class Pops : Form
 {

  public event PopSaveClickedHandler PopSaveClicked;
  public Pops()
  {

   InitializeComponent();
  }

  private void btnSave_Click(object sender, EventArgs e)
  {
  if(PopSaveClicked!=null)
  {
    this.PopSaveClicked(txtUserName.Text);
  }
  }
 }
}
  

Краткие сведения:

1. Добавьте делегат (место, где он доступен как для родительской, так и для дочерней формы) :

  public delegate void PopSaveClickedHandler(String text);
  

2.In форма: всплывает, добавляем событие:

  public event PopSaveClickedHandler PopSaveClicked;
  

3. Подпишитесь на событие в родительской форме:

 p.PopSaveClicked  = new PopSaveClickedHandler(p_PopSaveClicked);
  

4.Вызываем событие в форме: всплывает кнопка Сохранить, нажимаем

 if(PopSaveClicked!=null)
{
  this.PopSaveClicked(txtUserName.Text);
}
  

Ответ №4:

Вы можете отправить данные в объект формы перед ее отображением. Создайте метод для вызова, отправьте информацию через конструктор … и т.д.

Комментарии:

1. Вы могли бы создать общедоступные свойства в объекте Form1 и задать их перед отображением Form1. Или вы могли бы добавить аргументы UserName Password в конструктор Form1. Затем в конструкторе Form1 задайте переменные-члены в Form1, используя эти данные. В любом случае вам нужно будет добавить переменные в Form1 для хранения данных и каким-то образом установить их из POP. Другой вариант — перегрузить метод, который отображает Form1, и добавить туда аргументы.