Доступ к элементу управления главной формы

У меня есть приложение windowsform с двумя окнами form и form2, которое генерируется по умолчанию (я считаю его основным) и 2-й формой, и я хотел получить доступ к текстовому полю основной формы из формы form2, чтобы обновить его кнопкой из этого.

Я нашел это решение, которое соответствует требованиям:

Форма, созданная по умолчанию:

private void btnIngresar_Click(object sender, EventArgs e)
    {

        lavhs instancia = new lavhs();
        usuario = txtboxUsuario.Text;
        contra = txtboxContra.Text;

        instancia.Show(this);      // que envia? una instancia del form actual?
    }

Форма 2:

private void btnActualizar_Click(object sender, EventArgs e)
    {
        Form1.usuario = txtActualizar.Text; //envio el string a un string statico perteneciente al form principal

        Form form1 = this.Owner; //Obtenemos el dueño del Form (no entiendo)

        TextBox cajaTextoForm1 =  (TextBox)form1.Controls["txtboxUsuario"]; //Obtenemos la caja de texto en Form1 (no entiendo)

        //Le pasamos el texto introducido
        cajaTextoForm1.Text = txtActualizar.Text;
    }

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

4
задан 04.03.2016, 20:42
2 ответа

Контроль в C# проходит и распределяется ссылкой, так что пока мы не верим в новый контроль в ней asignaciГіn (с new .), каждый раз, когда мы распределили контроль над переменной (Вашего типа), переменная сделает снабди ссылками в вышеупомянутый контроль, в тот же объект. Я предлагаю:

  • Объявлять внутри Form2, textBox_par , которому мы распределим txtbox_usuario , так что любое изменение, что мы сделали textBox_par , применило прямо txtbox_usuario к .

Замечает: SuprimГ - ты делишь cГіdigo, который ты поместил, тогда, приведи в соответствие этот пример в твою разработку.

Form1.cs.

using System;
using System.Windows.Forms;

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

        internal static string usuario;

        private void ingresar_Click(object sender, EventArgs e)
        {
            usuario = txtbox_usuario.Text;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 Form2 = new Form2();
            Form2.textBox_par = txtbox_usuario;
            Form2.Activate();
            Form2.Show();
        }
    }
}

Form2.cs.

using System;
using System.Windows.Forms;

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

        internal TextBox textBox_par;

        private void actualizar_button_Click(object sender, EventArgs e)
        {
            Form1.usuario = txtActualizar.Text;
            textBox_par.Text = txtActualizar.Text;
        }
    }
}
1
ответ дан 24.11.2019, 14:46

Ты не соглашаешься с формы прямо на контроль другого, но ты делаешь это разъединенной формой используя интерфейсы.

Здесь

Сообщать формуляр

Объяснило, как ты это мог бы добиваться

, идею дело в том, что ты определил интерфейс, как то, чтобы быть

interface IForm{
   void Metodo1();
}

Тогда снопами, что form осуществил интерфейс

public class FormPrincipal : Form, IForm{
    //codigo del form
}

, Когда ты призываешь form, перемещает инстанцию в строителе

private void btnIngresar_Click(object sender, EventArgs e)
{
    lavhs instancia = new lavhs(this);
    instancia.Show();      
}

Доступ к данным, или реализовывать действия главной формы ты это реализуешь посредством методов или свойств, которые ты определял бы в интерфейсе, но одного ты перемещаешь другой данные просто не контролируй.

В form2 ты использовал бы

 public class lavhs:Form{

     private IForm _form;

     public lavhs(IForm form){ //este es el constructor
          _form = form;
     }

     //para acceder al form principal lo haces por medio de _form
 }

Все это это объяснило лучше в artГ-заду, который я предложил сначала.

3
ответ дан 24.11.2019, 14:46
  • 1
    Интерфейс - контракт, который определяется в отце, и который хотел бы использовать этот " puente" нуждайся в том, чтобы использовать интерфейс, это задняя дверь, как которая всегда она открыта в того, кто просит ее? прощение я прочитал достаточно об интерфейсе, но сложно понимать Ваши главные использования. – Miko 05.03.2016, 20:56
  • 2
    точный interace - контракт, который он определяет, что функциональность будет выставляться, хотя не если концепция " дверь trasera" он был бы правильным. Но я воображаю ты понимаешь идею, которую он хотел выдвинуть в примере, с интерфейсами смоги разъединять коммуникацию между forms – Leandro Tuttini 06.03.2016, 02:39