acceder a objeto desde form hijo MDI

Iniciado por d91, 27 Octubre 2015, 19:35 PM

0 Miembros y 1 Visitante están viendo este tema.

d91

hola a todos, estoy intentado activar un ítem del  menú toolStrip desde un form hijo en el evento formClosed, este lo desactivo al abrir el form hijo, pero al cerrar el form hijo me da el error de 'System.NullReferenceException', o  sea al abrir el form hijo se desactiva el menú y al cerrarlo debería de activarse, y solo lo primero he podido hacer
Código (csharp) [Seleccionar]

//aqui lo desactivo al abrir el form hijo

        private void proveedorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Prueba f = new Prueba();
            f.MdiParent = this;
            f.Show();

            this.toolStripDropDownButton1.Enabled = false;

        }

//funciona bien

aquí les dejo la forma en que intento acceder al toolStrip del formulario principal
Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SAF
{
    public partial class Prueba : Form
    {
        Form1 f = new Form1(); // nombre de mi formulario principal

        public Prueba()
        {
            InitializeComponent();
           
        }

        private void Prueba_Load(object sender, EventArgs e)
        {

           

        }

        private void Prueba_FormClosed(object sender, FormClosedEventArgs e)
        {
           
            ToolStrip objMenu = (ToolStrip)this.f.Controls["toolStripDropDownButton1"];

           
            objMenu.Items["toolStripDropDownButton1"].Enabled = true;

            //aquí debería de activarse nuevamente el menu


        }
    }
}




El Benjo

En primera instancia lo estás haciendo bien, pero no necesitas acceder al StripDropDown de esa manera, puedes hacerlo de la manera tradicional con:

Código (csharp) [Seleccionar]
private void Prueba_FormClosed(object sender, FormClosedEventArgs e)
        {

            f.toolStripDropDownButton1.Enabled = true;


        }


Ahora bien, la excepción System.NullReferenceException creo que te ocurre porque (según veo en tu código) escribiste mal el nombre de uno de los controles, lo que intentas hacer según tu código es algo así como:

Código (csharp) [Seleccionar]
toolStripDropDownButton1.toolStripDropDownButton1

Es decir que buscas un item dentro del control que tenga el mismo nombre del item en vez de acceder únicamente al control. Intenta lo mismo pero con:

Código (css) [Seleccionar]
private void Prueba_FormClosed(object sender, FormClosedEventArgs e)
        {

            ToolStrip objMenu = (ToolStrip)this.f.Controls["toolStripDropDownButton1"];


            objMenu.Enabled = true;


        }
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.