Menus en C#

Soy nuevo en C#. Estoy probando algunas funciones para desarrollar un sistema. He creado un Formulario MDI el cual fungirá como mi Menú y este lo conecto con un formulario hijo (altas), con la propiedad del padre ismdicontainer en true y la del hijo en false, al ejecutarlo aparece en el S.O. (windows) una ventana que hace referencia al menú (hasta ahí bien), mi problema es que al abrir el formulario hijo por medio del padre, en S.O.( windows) aparece otra ventana que hace referencia al formulario hijo (altas), entonces en Windows tengo 2 ventanas que hacen referencia al mismo programa pero cada ventana a diferente form. Quiero saber si puedo hacer que al repetir ese proceso en Windows me abra solo una ventana para hacer referencia al programa sin importar cuantos forms hijos haya.

3 respuestas

Respuesta
1
Espero que estés bien.
Entiendo que el problema es que la ventana "hijo" no aparece dentro del entorno MDI. La solución es muy simple, usa la propiedad "MdiParent" de la instancia "hijo" antes de llamar en Show.
Te dejo un ejemplo simple:
Mi entorno 2 forms, "form1" será el entorno MDI, "form2" será la pantalla "hijo" que aparecerá dentro. Agregué un menú "Prueba" que abrirá los childs.
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void pruebaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.MdiParent = this;
            f.Show();
        }
    }
La segunda, abrir un único programa (EXE) desde el SO se debe checar que el proceso no exista ejecutándose, es simple, te copio todo el Program. Cs de ejemplo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
namespace WindowsFormsApplication1
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            FileInfo fi = new FileInfo(Application.ExecutablePath);
            string exeName = fi.Name.Remove(fi.Name.IndexOf(fi.Extension), fi.Extension.Length);
            Process[] procs = Process.GetProcessesByName(exeName);
            if (procs.Length <= 1)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else
                MessageBox.Show("Se está ejecutando una instancia del programa. Imposible continuar.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
}
Respuesta
1
Ya pues mira no basta con poner que es un formulario hijo, tienes que poner la siguiente linea donde abres el formulario es decir en el código del padre, con eso dice que la ventana debe estar dentro de ese aplicativo
childForm.MdiParent = this;
Esta linea es la que hace que no se vean dos pantallas
Form1 childForm = new Form1();
childForm.MdiParent = this;
childForm.Show();
Respuesta
1
te falto un pequeño detalle... falta asignarle un valor a un propiedad del formulario hijo, la propiedad es MdiParent = this;
Donde dis es el Form padre desde donde mandas a llamar el formulario hijo.
Es importante que le asignes este valor a la propiedad antes de hacer un show al formulario hijo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas