Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: d91 en 27 Octubre 2015, 19:35 pm



Título: acceder a objeto desde form hijo MDI
Publicado por: d91 en 27 Octubre 2015, 19:35 pm
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
  1. //aqui lo desactivo al abrir el form hijo
  2.  
  3.        private void proveedorToolStripMenuItem_Click(object sender, EventArgs e)
  4.        {
  5.            Prueba f = new Prueba();
  6.            f.MdiParent = this;
  7.            f.Show();
  8.  
  9.            this.toolStripDropDownButton1.Enabled = false;
  10.  
  11.        }
  12.  
  13. //funciona bien
  14.  
aquí les dejo la forma en que intento acceder al toolStrip del formulario principal
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace SAF
  12. {
  13.    public partial class Prueba : Form
  14.    {
  15.        Form1 f = new Form1(); // nombre de mi formulario principal
  16.  
  17.        public Prueba()
  18.        {
  19.            InitializeComponent();
  20.  
  21.        }
  22.  
  23.        private void Prueba_Load(object sender, EventArgs e)
  24.        {
  25.  
  26.  
  27.  
  28.        }
  29.  
  30.        private void Prueba_FormClosed(object sender, FormClosedEventArgs e)
  31.        {
  32.  
  33.            ToolStrip objMenu = (ToolStrip)this.f.Controls["toolStripDropDownButton1"];
  34.  
  35.  
  36.            objMenu.Items["toolStripDropDownButton1"].Enabled = true;
  37.  
  38.            //aquí debería de activarse nuevamente el menu
  39.  
  40.  
  41.        }
  42.    }
  43. }
  44.  
  45.  



Título: Re: acceder a objeto desde form hijo MDI
Publicado por: El Benjo en 28 Octubre 2015, 06:20 am
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
  1. private void Prueba_FormClosed(object sender, FormClosedEventArgs e)
  2.        {
  3.  
  4.            f.toolStripDropDownButton1.Enabled = true;
  5.  
  6.  
  7.        }

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
  1. 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
  1. private void Prueba_FormClosed(object sender, FormClosedEventArgs e)
  2.        {
  3.  
  4.            ToolStrip objMenu = (ToolStrip)this.f.Controls["toolStripDropDownButton1"];
  5.  
  6.  
  7.            objMenu.Enabled = true;
  8.  
  9.  
  10.        }