Перемещать стоимость booleano между персонализированными формулярами - Windows Form

Я разрабатываю решение Windows типа Form, который содержит два формуляра:

Формуляр frm_abrir_ventana:

Поля:

  • (1) Button "Abrir": Открой формуляр так называемый frm_nueva_ventana.

Когда эта кнопка нажимается, нужно блокировать. Пример: Abrir.Enabled = false;


Формуляр frm_nueva_ventana:

Поля:

  • (1) RadioButton: Определи, если кнопка формуляра frm_abrir_ventana уполномочена.
  • (1) Button Finalizar: Закрой настоящий формуляр (frm_nueva_ventana) и будь должен давать возможность кнопке формуляра frm_abrir_ventana.

Он проверял этот вопрос, но он не применяется к ситуации, которую я описываю в моем вопросе.

Разгрузка программы - следующая:

  1. Нажимать кнопку Abrir формуляра frm_abrir_ventana.
  2. Событие OnClick кнопки Abrirоткрой инстанцию формуляра frm_nueva_ventana и блокируй кнопку Abrir.
  3. В формуляре frm_nueva_ventana, смоги предпочитать выбирать RadioButton.
  4. В настоящем формуляре frm_nueva_ventana, нажмите на кнопку Finalizar, посылая checked (boolean) RadioButton в первый формуляр а именно, frm_abrir_ventana.
  5. Устанавливать стоимость признака Enabled в кнопку Abrir формуляра frm_abrir_ventana.

Чтобы обобщать, проблема, которая у меня есть в этом моменте, состоит в том, чтобы посылать стоимость boolean между этими двумя формулярами; когда второй формуляр закончит Вашу функциональность, нужно закрывать и давать возможность снова кнопке Abrir.

Это мой настоящий код:

Код формуляра frm_abrir_ventana:

/// Propiedad pública del formulario "para habilitar el botón (Abrir)".
public bool EstadoBoton { get; set; }

/// 
/// Abrir segundo formulario (frm_nueva_ventana).
/// 
/// 
/// 
private void btnAbrir_Click(object sender, EventArgs e)
{
    frm_nueva_ventana frmNewVnt = new frm_nueva_ventana();
    frmNewVnt.Show();
    btnAbrir.Enabled = false;
}

Код frm_nueva_ventana:

/// 
/// Cerrar actual formulario (frm_nueva_ventana) y enviar
/// el checked del RadioButton al botón del primer formulario.
/// 
/// 
/// 
private void btnFinalizar_Click(object sender, EventArgs e)
{
    // frm_abrir_ventana aún está abierta y debe estarlo.
    // por lo que no sé tampoco cómo detectar este proceso.
    frm_abrir_ventana frmAbrVnt = new frm_abrir_ventana();
    frmAbrVnt.Show();
    frmAbrVtn.EstadoBoton = true;
}

Как я могу устанавливать эту функциональность правильно?

2
задан 13.04.2017, 16:00
2 ответа

Это может быть одна soluciГіn:

В формуляре frm_abrir_ventana

using System;
using System.Windows.Forms;

namespace NavigateForms
{
    public partial class frm_abrir_ventana : Form
    {
        public frm_abrir_ventana()
        {
            InitializeComponent();
        }

        private void btnAbrir_Click(object sender, EventArgs e)
        {
            //Instancia de la nueva ventana
            frm_nueva_ventana frmNuevaVentana = new frm_nueva_ventana();
            //Mostramos el formulario
            frmNuevaVentana.Show();
            //Pasamos la instancia actual de este formulario por un metodo publico que
            //contiene el formulario frmNuevaVentana
            frmNuevaVentana.getFrm(this);
            //Inhabilitamos el botón
            btnAbrir.Enabled = false;
        }

        /// <summary>
        /// Obtiene el valor boleano del checkbox del formulario frmNuevaVentana
        /// </summary>
        /// <param name="boleano"></param>
        public void getBoolean(bool boleano)
        {
            btnAbrir.Enabled = boleano;
        }
    }
}

В формуляре frm_nueva_ventana

using System;
using System.Windows.Forms;

namespace NavigateForms
{
    public partial class frm_nueva_ventana : Form
    {
        /// <summary>
        /// Esta variable de tipo frm_abrir_ventana nos servira para almacenar la instancia
        /// de la "pagina principal"
        /// </summary>
        frm_abrir_ventana formInstancia = null;

        public frm_nueva_ventana()
        {
            InitializeComponent();
        }

        private void btnFinalizar_Click(object sender, EventArgs e)
        {       
           //Llamamos al metodo publico que se encuentra en el formulario frm_abrir_ventana y pasamos
           //el valor del checkedbox
           formInstancia.getBoolean(checkB.Checked);

            //cerramos este formulario
           this.Close();         
        }

        /// <summary>
        /// Este metodo publico lo ocupamos en el formulario frm_abrir_ventana para poder pasar la instancia de la
        /// "pagina principal"
        /// </summary>
        /// <param name="form"></param>
        public void getFrm(frm_abrir_ventana form)
        {
            formInstancia = form;
        }
    }
}
3
ответ дан 24.11.2019, 13:36
  • 1
    Привет Кац, желанный и спасибо за достигание... Хотя est и # 225; просвет c и # 243; я говорю, думая о будущем лекторате этого вопроса, quiz и # 225; s быть и # 237; в рекомендуемый издавать ответ добавляя что-то из текста объясняя кратко c и # 243; mo дело в том, что он решает, что автор est и # 225; ища. – Mariano 19.08.2016, 03:04
  • 2
    Пойди!! Дай мне момент и я это объясняю подробно описанный. – Katz 19.08.2016, 03:15

Ты не должен создавать новую инстанцию frm_abrir_ventana, когда ты хочешь вернуться в окно отец, ты должен использовать существующую инстанцию

здесь Сообщать Формуляры

объяснило на теме

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

Окно, отец, посылает его инстанцию другому form

public class frm_abrir_ventana
{
    public bool EstadoBoton { get; set; }


    private void btnAbrir_Click(object sender, EventArgs e)
    {
        frm_nueva_ventana frmNewVnt = new frm_nueva_ventana(this);
        frmNewVnt.Show();
        btnAbrir.Enabled = false;
    }

}

Окно дочь получает инстанцию и использует ее, чтобы посылать данные

public class frm_nueva_ventana
{
    private frm_abrir_ventana frmAbrVnt;

    public frm_nueva_ventana()
    {
        InitialComponente();
    }

    public frm_nueva_ventana(frm_abrir_ventana frm) : this()
    {
        this.frmAbrVnt = frm;
    }


    private void btnFinalizar_Click(object sender, EventArgs e)
    {
        frmAbrVtn.EstadoBoton = true;
        this.Close();
    }

}

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

2
ответ дан 24.11.2019, 13:36
  • 1
    Леандро, к несчастью я не смог добиваться, чтобы оно функционировало она l и # 243; gica, который ты объяснил в детали в твоем ответе, но я проголосовал в благосклонность, так как это полный ответ, и что может помогать другим. +1 и спасибо, снова из-за того, что имеет твои знания. – Mauricio Arias Olave 19.08.2016, 16:34
  • 2
    потому что ты не добился, чтобы оно функционировало? может быть, если ты это объясняешь, мы могли бы анализировать, что не. Другой ответ, который ты помечаешь, почти igua в ту, которую я предлагаю только, что инстанция вместо того, чтобы перемещать ее в строителе, использует метод, который выставляет form, сын – Leandro Tuttini 19.08.2016, 17:06
  • 3
    С c и # 243; я говорю, что ты предоставлял, протестировав это, когда закрывается настоящий формуляр, он не дает возможность снова bot и # 243; n Abrir из главного формуляра. Вот то, что я смог видеть и как я est и # 225; n торопя с этой разработкой он я dif и # 237; cil посвящать ему больше времени для " pulir" подробнее. Я тебе благодарен снова. – Mauricio Arias Olave 19.08.2016, 17:36