habilitar menustrip

Iniciado por d91, 16 Octubre 2015, 00:13 AM

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

d91

hola a todos estoy haciendo una pequeña aplicación Windows forms, en un panel cargo los usercontrol de que tienen formularios, grid, etc. lo único es que quiero forzar al usuario a que cierre el usercontrol para poder abrir otro, pensé en deshabilitar el menú al abrir el usercontrol, pero no se en que evento habilitarlo para cuando se cierre el usercontrol
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 Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
           
        }

       

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void nuevoClienteToolStripMenuItem_Click_1(object sender, EventArgs e)
        {

            if (!panel3.Controls.Contains(InsercionClientes.Instance))
            {

                panel3.Controls.Add(InsercionClientes.Instance);
                InsercionClientes.Instance.Dock = DockStyle.Fill;
                InsercionClientes.Instance.BringToFront();
               
            }//if de estado de UC

            else {

                InsercionClientes.Instance.BringToFront();
            }//else
            menuStrip1.Enabled = false;
           
        }
    }
}



Eleкtro

#1
Cita de: d91 en 16 Octubre 2015, 00:13 AMen un panel cargo los usercontrol

No es necesario que heredes la trivialidad de un UserControl, puedes heredar un Form, solamente tienes que tener en cuenta desactivar la propiedad Form.TopLevel para hacer el MDI.

Form.TopLevel Property - MSDN




Cita de: d91 en 16 Octubre 2015, 00:13 AMquiero forzar al usuario a que cierre el usercontrol para poder abrir otro
pensé en deshabilitar el menú al abrir el usercontrol, pero no se en que evento habilitarlo para cuando se cierre el usercontrol

Te daré varias opciones...



1. - Si quieres desactivar/activar el menu entero, puedes suscribirte a los eventos Panel.ControlAdded y Panel.ControlRemoved

Ejemplo en VB.Net:
Código (vbnet) [Seleccionar]
Private Sub Panel3_ControlAdded(ByVal sender As Object, ByVal e As ControlEventArgs) _
Handles Panel3.ControlAdded,
       Panel3.ControlRemoved

   Me.nuevoClienteToolStripMenuItem.Enabled =
       Not DirectCast(sender, Panel).Controls.OfType(Of CustomMDIForm).Any

End Sub


Ejemplo en C#:
Código (csharp) [Seleccionar]
private void Panel3_ControlAdded_And_ControlRemoved(object sender, ControlEventArgs e) {
this.nuevoClienteToolStripMenuItem.Enabled = !((Panel)sender).Controls.OfType<CustomMDIForm>.Any();
}




2. - Si quieres desactivar/activar un item en particular del menu, puedes suscribirte al evento ToolStripMenuItem.DropDownOpening y acceder al item en cuestión en la colección ToolStripMenuItem.DropDownItems.

Ejemplo en VB.Net:
Código (vbnet) [Seleccionar]
Private Sub NuevoClienteToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles nuevoClienteToolStripMenuItem.DropDownOpening

   DirectCast(sender, ToolStripMenuItem).DropDownItems(index:=0).Enabled =
       Not Me.Panel3.Controls.OfType(Of CustomMDIForm).Any

End Sub


Ejemplo en C#:
Código (csharp) [Seleccionar]
private void NuevoClienteToolStripMenuItem_Click(object sender, EventArgs e) {
((ToolStripMenuItem)sender).DropDownItems(index: 0).Enabled = !this.Panel3.Controls.OfType<CustomMDIForm>.Any();
}




3. - También puedes administrar la visibilidad del menú desde tu Form heredado o desde un Usercontrol, de la misma manera.

En tu herencia, le pasas la instancia del ToolStipMenuItem al Constructor de la class, y cambias su visibilidad suplantando los métodos OnLoad y OnDispose.

Ejemplo en VB.Net:
Código (vbnet) [Seleccionar]
Public NotInheritable Class CustomMDIForm : Inherits Form

   Public ReadOnly MenuItem As ToolStripMenuItem

   Public Sub New(ByVal parent As Control, ByVal menuItem As ToolStripMenuItem)

       With Me
           .TopLevel = False
           .Parent = parent
           .StartPosition = FormStartPosition.CenterParent
           .FormBorderStyle = FormBorderStyle.Sizable
           .Dock = DockStyle.Fill
       End With

       Me.MenuItem = menuItem

   End Sub

   Private Sub New()
   End Sub

   Protected Overrides Sub OnLoad(ByVal e As EventArgs)
       If (Me.MenuItem IsNot Nothing) Then
           Me.MenuItem.Enabled = False
       End If
       MyBase.OnLoad(e)
   End Sub

   Protected Overrides Sub Dispose(ByVal disposing As Boolean)
       If (Me.MenuItem IsNot Nothing) Then
           Me.MenuItem.Enabled = True
       End If
       MyBase.Dispose(Disposing)
   End Sub

End Class

+
Código (vbnet) [Seleccionar]
Public NotInheritable Class Form1 : Inherits Form

   Private cf As CustomMDIForm

   Public Sub New()
       Me.InitializeComponent()
       Me.cf = New CustomMDIForm(parent:=Me.Panel3, menuItem:=Me.nuevoClienteToolStripMenuItem)
   End Sub

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
   Handles MyBase.Load

       Me.cf.Show()

   End Sub

End Class


Traducción online a C#:
Código (csharp) [Seleccionar]
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;

public sealed class CustomMDIForm : Form {

public readonly ToolStripMenuItem MenuItem;

public CustomMDIForm(Control parent, ToolStripMenuItem menuItem) {
this.TopLevel = false;
this.Parent = parent;
this.StartPosition = FormStartPosition.CenterParent;
this.FormBorderStyle = FormBorderStyle.Sizable;
this.Dock = DockStyle.Fill;

this.MenuItem = menuItem;
}

private CustomMDIForm() {
}

protected override void OnLoad(EventArgs e) {
if ((this.MenuItem != null)) {
this.MenuItem.Enabled = false;
}
base.OnLoad(e);
}

protected override void Dispose(bool disposing) {
if ((this.MenuItem != null)) {
this.MenuItem.Enabled = true;
}
base.Dispose(disposing);
}

}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================

+
Código (csharp) [Seleccionar]
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;

public sealed class Form1 : Form {

private CustomMDIForm cf;

public Form1() {
Load += Form1_Load;
this.InitializeComponent();
this.cf = new CustomMDIForm(parent: this.Panel3, menuItem: this.nuevoClienteToolStripMenuItem);
}

private void Form1_Load(object sender, EventArgs e) {
this.cf.Show();
}
}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================



Saludos!