none
Método en clase anidada RRS feed

  • Pregunta

  • Hola

    Necesito saber como me pueden ayudar a crear un método en una clase anidada.

    Al hacerlo, me sale el mensaje de 

    Los métodos de extensión deben definirse en una clase estática de nivel superior

    Este es mi código

     internal class globales
        {
            
            public static class Movimientos
            {
    
                public static void Habilitacion_radio_buttons(this System.Windows.Forms.Form form, System.Boolean estado)
                {
                    //System.Windows.Forms.RadioButton control = new System.Windows.Forms.RadioButton();
                    foreach (Control control in form.Controls)
                    {
                        if (control is RadioButton)
                        {
                            // entonces revisamos su valor
                            RadioButton radio = control as RadioButton;
                            radio.Enabled = estado;
                        }
                    }
                }
    
            }
        }

    Lo que yo quiero es que quede bien ordenada la clase, así: globales.Movimientos.Habilitacion_radio_buttons(bla bla bla)

    Se puede hacer moviendo el método Habilitacion_radio_buttons a la clace globales, pero yo no lo quiero asi.

    Si alguien puede ayudarme, se lo agradezco

    Buen día

    martes, 7 de agosto de 2018 2:50

Respuestas

  • Hola Leandro

    Ya pude hacerlo con tu información

    entonces queda asi:

    namespace comunes

             public class Pestañas

             namespace Movimientos

                          internal static class Facturas

                                           public static void Habilitacion_radio_buttons

    En su orden jerárquico, como lo puse

    Te agradezco mucho, diste en el clavo

    Voy a dar por respondida la pregunta 

    Gracias

    • Propuesto como respuesta rodolopa miércoles, 8 de agosto de 2018 23:23
    • Votado como útil rodolopa miércoles, 8 de agosto de 2018 23:23
    • Marcado como respuesta Sergio ParraModerator jueves, 9 de agosto de 2018 6:07
    miércoles, 8 de agosto de 2018 23:23

Todas las respuestas

  • hola

    es que estas conteniendo la extension dentro de

     internal class globales

    esa clase no es static

    porque no defines la clase Movimientos a nivel del namespace, porque tiene que estar dentro de globales o que este sea el namespace

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de agosto de 2018 3:01
  • Hola Leandro, y gracias por responder

    Es que realmente lo que yo quiero es que quede bien ordenada la clase, así: globales.Movimientos.Habilitacion_radio_buttons(bla bla bla)

    Me entiendes?

    Si la muevo para arriba, no me quedaría así

    La quiero así, para que quede bien ordenada.

    Alguna sugerencia?

    Gracias

    miércoles, 8 de agosto de 2018 0:56
  • hola

    >>Es que realmente lo que yo quiero es que quede bien ordenada la clase, así: globales.Movimientos.Habilitacion_radio_buttons

    pero el orden no se logra con clase, se logra con namespaces

    sabes lo que es un namespaces ?

    estas usando incorrectamente la clase para una funcionalidad que no es la correcta

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 8 de agosto de 2018 13:45
  • Te refieres a usar NameSapaces anidados ?

    NameSpace1

        NameSpace2

          NameSpace3

                         Metodo

    Algo asi?

    miércoles, 8 de agosto de 2018 15:44
  • >>Te refieres a usar NameSapaces anidados ?

    los namespace no es necesario anidarlos

    en tu caso solo seria

    namespace globales { public static class Movimientos { public static void Habilitacion_radio_buttons(this System.Windows.Forms.Form form, System.Boolean estado) {

    los metodos no pueden estar sueltos, esos si estan en clases

    namespace (C# Reference)

    es mas si defines carpetas en el proyecto estos generan namespaces

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta rodolopa miércoles, 8 de agosto de 2018 23:23
    miércoles, 8 de agosto de 2018 17:16
  • Hola Leandro

    Ya pude hacerlo con tu información

    entonces queda asi:

    namespace comunes

             public class Pestañas

             namespace Movimientos

                          internal static class Facturas

                                           public static void Habilitacion_radio_buttons

    En su orden jerárquico, como lo puse

    Te agradezco mucho, diste en el clavo

    Voy a dar por respondida la pregunta 

    Gracias

    • Propuesto como respuesta rodolopa miércoles, 8 de agosto de 2018 23:23
    • Votado como útil rodolopa miércoles, 8 de agosto de 2018 23:23
    • Marcado como respuesta Sergio ParraModerator jueves, 9 de agosto de 2018 6:07
    miércoles, 8 de agosto de 2018 23:23
  • pero dentro de una class no se pone un namespace

    despues de class Pestañas no deberias usar namespace Movimientos

    se usa todo namespaces salvo la ultima que es la class Facturas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2018 0:43
  • Aclaro

    La clase Pesteñas NO CONTIENE al NameSpace Movimientos, sino que está arriba de el, en solitario, contenida únicamente por el NameSpace comunes. Me entiendes?

    Gracias por todo

    jueves, 9 de agosto de 2018 3:12
  • ehh no

    lo correcto seria

    namespace comunes

             namespace Pestañas

                 namespace Movimientos

                          internal static class Facturas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2018 16:07
  • Hola y gracias Leandro

    Es que en Pestañas, van unas variables de un formulario, quedando así:

    using System.Windows.Forms;
    
    namespace comunes
    {
        /// <summary>
        /// Subrutinas compartidas de varios módulos de pestañas
        /// </summary>
        public class Pestañas
        {
            #region Indicadores de apertura de pestañas
    
            public static bool clientes;
            public static bool proveedores;
            public static bool productos;
            public static bool usuarios;
            public static bool categorias;
            public static bool factura_ventas;
            public static bool factura_compras;
            public static bool factura_proforma;
            public static bool cierre_caja;
    
            #endregion Indicadores de apertura de pestañas
    
            #region Identificador de Tabpasge activo - necesario para el buscador -
    
            public static string tabactivo = null;
    
            #endregion Identificador de Tabpasge activo - necesario para el buscador -
    
            /// <summary>
            /// Variable que controla el timer del módulo de servidor del menú
            /// </summary>
            public static int segundos;
        }
    
        namespace Movimientos
        {
            /// <summary>
            /// Subrutinas compartidas de módulos de facturación de Compras y Ventas
            /// </summary>
            internal static class Facturas
            {
                /// <summary>
                /// Habilita Deshabilita los radio buttons
                /// </summary>
                /// <param name="form">Formulario activo</param>
                /// <param name="estado">Falso o verdadero</param>
                public static void Habilitacion_radio_buttons(this Syncfusion.Windows.Forms.MetroForm form, System.Boolean estado)
                {
                    foreach (Control control1 in form.Controls)
                    {
                        if (control1 is RadioButton)
                            control1.Enabled = false;
                        else if (control1 is Syncfusion.Windows.Forms.Tools.TabControlAdv)
                        {
                            foreach (Control control2 in control1.Controls)
                            {
                                if (control2 is Syncfusion.Windows.Forms.Tools.TabPageAdv)
                                    foreach (Control control3 in control2.Controls)
                                    {
                                        if (control3 is RadioButton)
                                        {
                                            control3.Enabled = estado;
                                        }
                                    }
                            }
                        }
                    }
                }
    
                /// <summary>
                /// Chequea descehquea los radio buttons
                /// </summary>
                /// <param name="form">Formulario activo</param>
                /// <param name="estado">Falso o verdadero</param>
                public static void Limpiar_radio_buttons(this Syncfusion.Windows.Forms.MetroForm form, bool estado)
                {
                    foreach (Control control1 in form.Controls)
                    {
                        if (control1 is RadioButton)
                        {
                            RadioButton radioButton = (RadioButton)control1;
    
                            radioButton.Checked = false;
                        }
                        else if (control1 is Syncfusion.Windows.Forms.Tools.TabControlAdv)
                        {
                            foreach (Control control2 in control1.Controls)
                            {
                                if (control2 is Syncfusion.Windows.Forms.Tools.TabPageAdv)
                                    foreach (Control control3 in control2.Controls)
                                    {
                                        if (control3 is RadioButton)
                                        {
                                            RadioButton radioButton = (RadioButton)control3;
    
                                            radioButton.Checked = false;
                                        }
                                    }
                            }
                        }
                    }
                }
            }
        }
    }

    Ves ?

    A mi me funciona bien así.

    Tu que piensas ?

    Gracuas

    jueves, 9 de agosto de 2018 17:49
  • >>A mi me funciona bien así. Tu que piensas ?

    ese codigo es valido, porque tienes namespaces y dentro class, una estructura simple

    pero no tienes namespaces, class, luego namespace y otra class

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2018 20:44
  • Si claro, en este internal static class Facturas Antes hay un namespace O tu dices que tiene que ser anidado ? Es que lo hago así, por que quiero que quede en este orden jerárquico: comunes.pestañas comunes.movimientos.facturas.Habilitacion_radio_buttons(bla bla bla) Ves? Gracias
    jueves, 9 de agosto de 2018 21:53
  • yo lo que digo es que la estructura la logras con namespace unicamente, no mezclando namespace y clases de forma intercalada

    es mas la estructura puede ser fisica si creas carpetas dentro del proyecto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta rodolopa miércoles, 15 de agosto de 2018 16:23
    viernes, 10 de agosto de 2018 1:06
  • A como te entiendo, y es que no lo he probado aún, es que en la carpeta comunes, creo otra subcarpeta Pestañas ?

    Ö creo otra subcarpeta Movimientos ?

    Gracias

    martes, 14 de agosto de 2018 5:15
  • Ok ya lo hice como decias y está perfecto.

    Es mejor así, con carpetas

    Te agradezco Leandro

    La marco como respuesta

    Gracias


    • Editado rodolopa miércoles, 15 de agosto de 2018 16:23
    miércoles, 15 de agosto de 2018 16:22
  • Hola Leandro

    Se que ya había marcado como respondida, pero ahora tengo un problema grande


    Puedo acceder en la carpeta permisos a la calse verificar, pero SOLO desde FRMSesion, que está contenido dentro de la carpeta usuarios.

    Pero si intento accesar de afuera de la carpeta Usuarios, no me reconoce nada

    Del archivo inicio.cs

    Ya lo he intentado con using dentro y fuera del namespace de donde estoy haciendo la llamada, y atambien creando una nueva instancia de la clase contenida.
    Que puede ser lo que está pasando ?

    Envío una imagen de las carpetas

    Gracias

    • Editado rodolopa jueves, 30 de agosto de 2018 16:24
    jueves, 30 de agosto de 2018 16:23