REVISIÓN: Se recibe una excepción "System.NullReferenceException" cuando combina menús principales y secundarios en una aplicación basada en formularios MDI en .NET Framework 1.1

Seleccione idioma Seleccione idioma
Id. de artículo: 890328 - Ver los productos a los que se aplica este artículo
Aviso

Para los usuarios que tengan Microsoft .NET Framework 1.1 Service Pack 1 instalado

Este artículo describe el mismo problema que se describe en 895579 de artículo de Microsoft Knowledge Base (KB). Sin embargo, la revisión que analiza este artículo es sólo para la versión de lanzamiento original de .NET Framework 1.1. Si tiene el .NET Framework 1.1 Service Pack 1 (SP1) instalado, utilice la revisión que se describe en el artículo 895579. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
895579REVISIÓN: Se recibe una excepción "System.NullReferenceException" cuando combina menús principales y menús de secundarios en una aplicación basada en formularios MDI en .NET Framework 1.1 Service Pack 1
Expandir todo | Contraer todo

En esta página

Síntomas

En Microsoft .NET Framework 1.1, al combinar los menús primarios y secundarios, puede producirse un error en tiempo de ejecución y puede recibir un mensaje de error excepción similar al siguiente:
System.NullReferenceException: Referencia a objeto no establecida como una instancia de un objeto.
Nota Puede combinar los menús primarios y secundarios en una aplicación de interfaz de múltiples documentos (MDI) basada en formularios.

Solución

Información de revisiones

Hay una revisión compatible de Microsoft. Sin embargo, se diseñó para corregir el problema descrito en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere al próximo service pack de .NET Framework 1.1 que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con servicios de soporte de cliente de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Información de archivo

La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y las horas de estos archivos se muestran en hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria el elemento fecha y hora en el panel de control.
  Date         Time   Version        Size       File name
  ----------------------------------------------------------------------
  01-Dec-2004  04:08  1.1.4322.1090  1,703,936  System.Design.dll
  01-Dec-2004  04:04  1.1.4322.1090    466,944  System.Drawing.dll
  01-Dec-2004  04:13  1.1.4322.1090  2,048,000  System.Windows.Forms.dll

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

Pasos para reproducir el problema

  1. Inicie Microsoft Visual Studio .NET 2003.
  2. En el menú archivo , haga clic en nuevo y, a continuación, haga clic en proyecto .
  3. Haga clic en Proyectos de Visual C# , haga clic en Aplicación para Windows y, a continuación, haga clic en Aceptar .
  4. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Form1.cs , haga clic en Ver código y reemplace todo el código en Form1.cs con el código siguiente.
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    
    namespace MDIMenuTest
    {
    	/// <summary>
    	/// Summary description for Form1.
    	/// </summary>
    	public class Form1 : System.Windows.Forms.Form
    	{
    		private System.Windows.Forms.MainMenu mainMenu1;
    		private System.Windows.Forms.MenuItem menuMain;
    		private System.Windows.Forms.MenuItem MenuFromMain;
    		/// <summary>
    		/// Required designer variable.
    		/// </summary>
    		private System.ComponentModel.Container components = null;
    
    		public Form1()
    		{
    			//
    			// Required for Windows Form Designer support
    			//
    			InitializeComponent();
    
    			// create new child
    			Child formChild = new Child();
    			formChild.MdiParent = this;   // set parent
    			formChild.Show();          // display child
    		}
    
    		/// <summary>
    		/// Clean up any resources being used.
    		/// </summary>
    		protected override void Dispose( bool disposing )
    		{
    			if( disposing )
    			{
    				if (components != null) 
    				{
    					components.Dispose();
    				}
    			}
    			base.Dispose( disposing );
    		}
    
    		#region Windows Form Designer generated code
    		/// <summary>
    		/// Required method for Designer support - do not modify
    		/// the contents of this method with the code editor.
    		/// </summary>
    		private void InitializeComponent()
    		{
    			this.mainMenu1 = new System.Windows.Forms.MainMenu();
    			this.menuMain = new System.Windows.Forms.MenuItem();
    			this.MenuFromMain = new System.Windows.Forms.MenuItem();
    			// 
    			// mainMenu1
    			// 
    			this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
    																					  this.menuMain});
    			// 
    			// menuMain
    			// 
    			this.menuMain.Index = 0;
    			this.menuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
    																					 this.MenuFromMain});
    			this.menuMain.MergeType = System.Windows.Forms.MenuMerge.MergeItems;
    			this.menuMain.Text = "Menu";
    			// 
    			// MenuFromMain
    			// 
    			this.MenuFromMain.Index = 0;
    			this.MenuFromMain.Text = "MenuFromMain";
    			// 
    			// Form1
    			// 
    			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    			this.ClientSize = new System.Drawing.Size(292, 266);
    			this.IsMdiContainer = true;
    			this.Menu = this.mainMenu1;
    			this.Name = "Form1";
    			this.Text = "Form1";
    			this.Load += new System.EventHandler(this.Form1_Load);
    
    		}
    		#endregion
    
    		/// <summary>
    		/// The main entry point for the application.
    		/// </summary>
    		[STAThread]
    		static void Main() 
    		{
    			Application.Run(new Form1());
    		}
    
    		
    	}
    }
    
  5. En el menú proyecto , haga clic en Agregar Windows Forms , haga clic en Formularios Windows Forms en plantillas , el formulario Child.cs, nombre y, a continuación, haga clic en Abrir .
  6. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Child.cs , haga clic en Ver código y, a continuación, reemplace todo el código que está en Child.cs con el código siguiente.
    using System;
    
    using System.Drawing;
    
    using System.Collections;
    
    using System.ComponentModel;
    
    using System.Windows.Forms;
    
    using System.Diagnostics;
    
     
    
    namespace MDIMenuTest
    
    {
    
    	/// <summary>
    
    	/// Summary description for Child.
    
    	/// </summary>
    
    	public class Child : System.Windows.Forms.Form
    
    	{
    
    		private System.Windows.Forms.MainMenu mainMenu1;
    
    		private System.Windows.Forms.MenuItem menuMain;
    
    		private System.Windows.Forms.MenuItem MenuFromChild;
    
    		private System.Windows.Forms.MenuItem menuItem1;
    
    		/// <summary>
    
    		/// Required designer variable.
    
    		/// </summary>
    
    		private System.ComponentModel.Container components = null;
    
     
    
    		public Child()
    
    		{
    
    			//
    
    			// Required for Windows Form Designer support
    
    			//
    
    			InitializeComponent();
    
     
    
    			//
    
    			// TODO: Add any constructor code after InitializeComponent call
    
    			//
    
    		}
    
     
    
    		/// <summary>
    
    		/// Clean up any resources being used.
    
    		/// </summary>
    
    		protected override void Dispose( bool disposing )
    
    		{
    
    			if( disposing )
    
    			{
    
    				if(components != null)
    
    				{
    
    					components.Dispose();
    
    				}
    
    			}
    
    			base.Dispose( disposing );
    
    		}
    
     
    
    		#region Windows Form Designer generated code
    
    		/// <summary>
    
    		/// Required method for Designer support - do not modify
    
    		/// the contents of this method with the code editor.
    
    		/// </summary>
    
    		private void InitializeComponent()
    
    		{
    
    			this.mainMenu1 = new System.Windows.Forms.MainMenu();
    
    			this.menuMain = new System.Windows.Forms.MenuItem();
    
    			this.MenuFromChild = new System.Windows.Forms.MenuItem();
    
    			// 
    
    			// mainMenu1
    
    			// 
    
    			this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
    
    																					  this.menuMain});
    
    			// 
    
    			// menuMain
    
    			// 
    
    			this.menuMain.Index = 0;
    
    			this.menuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
    
    																					 this.MenuFromChild,
    
    			});
    
    			this.menuMain.MergeType = System.Windows.Forms.MenuMerge.MergeItems;
    
    			this.menuMain.Text = "Menu";
    
    			this.menuMain.Popup += new System.EventHandler(this.menuMain_Popup);
    
    			// 
    
    			// MenuFromChild
    
    			// 
    
    			this.MenuFromChild.Index = 0;
    
    			this.MenuFromChild.Text = "MenuFromChild";
    
     
    
    			// 
    
    			// Child
    
    			// 
    
    			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    
    			this.ClientSize = new System.Drawing.Size(292, 266);
    
    			this.Menu = this.mainMenu1;
    
    			this.Name = "Child";
    
    			this.Text = "Child";
    
     
    
    		}
    
    		#endregion
    
     
    
    		private void menuMain_Popup(object sender, System.EventArgs e)
    
    		{
    
    			// The goal is to dynamically change the child menu items during run time.
    
    			// Then, the new child menu items will be merged into the MDI main menu automatically by the .NET Framework.
    
    			// However, the program crashed after trying to add the following menu item to the MDI menu.
    
    			MenuItem menuItem = new MenuItem("New Menu Item From Child");
    
    			this.menuMain.MenuItems.Add(menuItem);
    
    		}
    
    	}
    
    }
  7. En el menú Depurar , haga clic en Inicio para compilar y, a continuación, ejecute el proyecto.
  8. En la nueva aplicación, haga clic en cualquier opción de menú. Recibirá el siguiente mensaje de error:
    Referencia a objeto no establecida como instancia de un objeto
Para obtener más información acerca de la terminología relativa de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft

Propiedades

Id. de artículo: 890328 - Última revisión: miércoles, 27 de diciembre de 2006 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.1
Palabras clave: 
kbmt kbqfe kbfix kbbug kbhotfixserver KB890328 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 890328

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com