using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Aplicacion.General;
using Exferia_Mythos._0_Modelos;
using Exferia_EntityFramework;
using Exferia_Mythos._3_Vistas.Listados;
using static Exferia_Aplicacion.General.Enumerados;
using Exferia_General;
using Exferia_Formularios;
using System.Threading;
using Exferia_Mythos.General;

namespace Exferia_Mythos._3_Vistas.ControlesPersonalizados_DentroPaneles
{
    public partial class CTU_P_EstructuraPartesPeticionDatos : UserControl
    {
        #region Variable privadas

        private List<INTERNO_Permisos_Modelo> g_lst_INTERNO_Permisos_Modelo = null;
        private P_Base g_frm_P_Base = null;
        private long g_lng_idEstructuraPartePeticionDatoSeccion = -1;

        #region Preguntas
        private INTERNO_ConfiguracionPantalla_Modelo g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS = null;

        public long g_lng_idPreguntas_Padre_NODOPRINCIPAL = 0;
        private string g_str_Padre_NodoPrincipal = "INICIO";

        public long g_lng_idPreguntas_FINALIZADOR = -9999999999;
        public string g_str_Nodo_FINALIZADOR = "Fin de la petición de datos";

        private int g_int_Preguntas_TotalRegistrosInsertados = 0;

        public long g_lng_idPregunta_Nuevos = -1;

        //Tarea Asincrona para la Rellenar DataGridView de Preguntas
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_Preguntas = null;

        //Listado de Preguntas
        public List<INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo> g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = null;
        public List<MYT_EstructurasPartesPeticionDatos_Arbol> g_lst_MYT_EstructurasPartesPeticionDatos_Arbol = null;
        public List<INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo> g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = new List<INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo>();

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Preguntas_Columnas;

        //Filtrado del Listado 
        public List<string> g_lst_ColumnasAMostrar_MYT_EstructurasPartesPeticionDatos_Preguntas = new List<string>();
        public ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas = new ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas();
        public Dictionary<string, object> g_dct_ListadoFiltros_MYT_EstructurasPartesPeticionDatos_Preguntas = new Dictionary<string, object>();
        #endregion

        #endregion

        #region Constructor
        public CTU_P_EstructuraPartesPeticionDatos(List<INTERNO_Permisos_Modelo> _lst_INTERNO_Permisos_Modelo, P_Base _frm_P_Base,long _lng_idEstructuraPartePeticionDatoSeccion)
        {
            InitializeComponent();

            try
            {
                Repintar.Empezar(this);

                CheckForIllegalCrossThreadCalls = false;

                g_lst_INTERNO_Permisos_Modelo = _lst_INTERNO_Permisos_Modelo;
                g_frm_P_Base = _frm_P_Base;
                g_lng_idEstructuraPartePeticionDatoSeccion = _lng_idEstructuraPartePeticionDatoSeccion;

                //Colores
                btn_FinalizarPreguntas.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_FONDO;
                btn_FinalizarPreguntas.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_LETRA;
                btn_FinalizarPreguntas.Text = g_str_Nodo_FINALIZADOR;

                ex_lbl_Leyenda_Pregunta_EscribirTexto.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_FONDO;
                ex_lbl_Leyenda_Pregunta_EscribirTexto.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_LETRA;

                ex_lbl_Leyenda_Pregunta_SeleccionarUnaRespuesta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_FONDO;
                ex_lbl_Leyenda_Pregunta_SeleccionarUnaRespuesta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_LETRA;

                ex_lbl_Leyenda_Pregunta_SeleccionarUnaOVariasRespuestas.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_FONDO;
                ex_lbl_Leyenda_Pregunta_SeleccionarUnaOVariasRespuestas.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_LETRA;

                ex_lbl_Leyenda_Respuesta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_RESPUESTAS_FONDO;
                ex_lbl_Leyenda_Respuesta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_RESPUESTAS_LETRA;

                ex_lbl_Leyenda_Pregunta_FinPeticionDatos.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_FONDO;
                ex_lbl_Leyenda_Pregunta_FinPeticionDatos.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_LETRA;
            }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(CTU_P_EstructuraPartesPeticionDatos));
            }
        }

        #endregion

        #region Inicio
        private void CTU_P_EstructuraPartesPeticionDatos_Load(object sender, EventArgs e)
        {
            try
            {
                #region PREGUNTAS

                //Crear Columnas Listado
                CrearColumnas_Listado_Preguntas();

                //Poner el tipo de orden si lo hubiera por defecto ######################################
                if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS != null &&
                    g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_ORDEN_DIRECCION_PORDEFECTO != null &&
                    g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_ORDEN_DIRECCION_PORDEFECTO.Trim().Length > 0)
                {
                    //Descendente
                    if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_ORDEN_DIRECCION_PORDEFECTO.Equals("1"))
                    {
                        Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_Preguntas_OrdenListado);
                        ex_btn_Preguntas_OrdenListado.Tag = "1";

                    }
                    //Ascendente
                    else
                    {
                        Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_Preguntas_OrdenListado);
                        ex_btn_Preguntas_OrdenListado.Tag = "0";
                    }
                }
                else
                {
                    if (g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas.ORDENACION_TIPO_PORDEFECTO().Trim().Length > 0)
                    {
                        //Descendente
                        if (g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas.ORDENACION_TIPO_PORDEFECTO().Equals("1"))
                        {
                            Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_Preguntas_OrdenListado);
                            ex_btn_Preguntas_OrdenListado.Tag = "1";
                        }
                        //Ascendente
                        else
                        {
                            Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_Preguntas_OrdenListado);
                            ex_btn_Preguntas_OrdenListado.Tag = "0";

                        }
                    }
                }
                //########################################################################################

                //Seleccionar Orden por Defecto en Combo #################################################
                if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS != null &&
                    g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_ORDEN_COLUMNA_PORDEFECTO != null &&
                    g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_ORDEN_COLUMNA_PORDEFECTO.Trim().Length > 0)
                {
                    ex_cbo_Preguntas_OrdenListado.SelectedItem = ex_cbo_Preguntas_OrdenListado.Items.Cast<INTERNO_ComboBox_Modelo>().Where(m => m.Descripcion.Equals(g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_ORDEN_COLUMNA_PORDEFECTO)).FirstOrDefault();
                }
                else
                {
                    if (g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas.ORDENACION_NOMBRECOLUMNA_PORDEFECTO().Trim().Length > 0)
                    {
                        ex_cbo_Preguntas_OrdenListado.SelectedItem = ex_cbo_Preguntas_OrdenListado.Items.Cast<INTERNO_ComboBox_Modelo>().Where(m => m.Identificador.Equals(g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas.ORDENACION_NOMBRECOLUMNA_PORDEFECTO())).FirstOrDefault();
                    }
                    else
                    {
                        ex_cbo_Preguntas_OrdenListado.SelectedItem = ex_cbo_Preguntas_OrdenListado.Items.Cast<INTERNO_ComboBox_Modelo>().FirstOrDefault();
                    }

                }
                #endregion

                Rellenar_DataGrid_Preguntas();

                //Recargar Arbol
                Crear_Nodo_Principal();
                if (g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo != null && g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Count > 0)
                {
                    foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo in g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.OrderBy(x => x.orden))
                    {
                        Arbol_Recargar(ex_trv_Preguntas.Nodes[0], mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo);
                    }
                }
            }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(CTU_P_EstructuraPartesPeticionDatos_Load));
            }
        }
        #endregion


        #region DataGridView

        private void CrearColumnas_Listado_Preguntas()
        {
            ex_dgv_Preguntas.AutoGenerateColumns = false;

            g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Preguntas_Columnas = g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas.LISTADO_COLUMNAS().Values.ToList();

            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Preguntas_Columnas)
            {
                DataGridViewTextBoxColumn dgv_Columna = new DataGridViewTextBoxColumn();
                dgv_Columna.DataPropertyName = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                dgv_Columna.Name = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                dgv_Columna.HeaderText = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_AMostrar;

                //Poner visible o no .........................................................................
                bool bol_Visible = true;
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Oculto)
                {
                    bol_Visible = false;
                }
                else if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS != null &&
                         g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNASAMOSTRAR != null &&
                         g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNASAMOSTRAR.Count > 0)
                {
                    if (!g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNASAMOSTRAR.Contains(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                    {
                        bol_Visible = false;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Mostrado_PorDefecto == false)
                {
                    bol_Visible = false;
                }
                dgv_Columna.Visible = bol_Visible;


                if (bol_Visible)
                {
                    g_lst_ColumnasAMostrar_MYT_EstructurasPartesPeticionDatos_Preguntas.Add(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna);
                }
                //.....................................................................................................

                //Tipo de Formateo si fuera Fecha
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    dgv_Columna.DefaultCellStyle.Format = "d";
                }

                //Poner Ancho Columna ................................................................................
                if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS != null &&
                    g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNAS_ANCHO != null &&
                    g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNAS_ANCHO.Count > 0 &&
                    g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNAS_ANCHO.ContainsKey(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                {
                    dgv_Columna.Width = g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNAS_ANCHO[mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna];
                }
                else
                {
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Ancho > 0)
                    {
                        dgv_Columna.Width = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Ancho;
                    }
                }
                //................................................................................................................

                dgv_Columna.ReadOnly = true;

                //Poner alineado segun tipo de datos ......................................................................................
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL) ||
                    mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG) ||
                    mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT) ||
                    mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                {
                    dgv_Columna.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                }
                else
                {
                    dgv_Columna.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                }
                //..............................................................................................................................

                ex_dgv_Preguntas.Columns.Add(dgv_Columna);

                //RELLENAR EL ORDEN EN COMBO
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Oculto == false)
                {
                    ex_cbo_Preguntas_OrdenListado.Items.Add(new INTERNO_ComboBox_Modelo(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna, mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_AMostrar, null));
                }

            }

            //Cambiar el orden de las columnas ........
            if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNAS_ORDEN != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNAS_ORDEN.Count > 0)
            {
                foreach (KeyValuePair<string, int> kvp_Valores in g_mdl_INTERNO_ConfiguracionPantalla_Modelo_PREGUNTAS.LISTADO_COLUMNAS_ORDEN)
                {
                    ex_dgv_Preguntas.Columns[kvp_Valores.Key].DisplayIndex = kvp_Valores.Value;
                }
            }
            //.........................................
        }

        #region Botones
        private void ex_btn_Preguntas_Add_Click(object sender, EventArgs e)
        {
            Add_Preguntas();
        }
        private void Add_Preguntas()
        {
            if (Datos_Generales.Permisos_Comprobar(Variables.G_STR_OPCION_MYT_ESTRUCTURAPARTEPETICIONDATOS, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Anadir, true))
            {
                g_lng_idPregunta_Nuevos -= 1;
                ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas.Cargar(null, g_lng_idPregunta_Nuevos);

                Preguntas_BloquearDesbloquear(true);

                ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas.Foco(g_frm_P_Base);
            }
        }

        private void ex_btn_Preguntas_Modificar_Click(object sender, EventArgs e)
        {
            Modificar_Preguntas();
        }
        private void Modificar_Preguntas()
        {
            if (Datos_Generales.Permisos_Comprobar(Variables.G_STR_OPCION_MYT_ESTRUCTURAPARTEPETICIONDATOS, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Modificar, true))
            {
                if (ex_dgv_Preguntas.Rows.Count > 0 &&
                    ex_dgv_Preguntas.SelectedRows.Count > 0)
                {
                    Preguntas_BloquearDesbloquear(true);

                    ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas.Foco(g_frm_P_Base);
                }
            }
        }

        private void ex_btn_Preguntas_Borrar_Click(object sender, EventArgs e)
        {
            Borrar_Preguntas();
        }
        private void Borrar_Preguntas()
        {
            if (Datos_Generales.Permisos_Comprobar(Variables.G_STR_OPCION_MYT_ESTRUCTURAPARTEPETICIONDATOS, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Borrar, true))
            {
                //Ver si hay algunbo seleccionado
                if (ex_dgv_Preguntas.Rows.Count > 0 && ex_dgv_Preguntas.SelectedRows.Count > 0)
                {
                    List<long> lst_ids_ABorrar = new List<long>();
                    foreach (DataGridViewRow dgvr in ex_dgv_Preguntas.SelectedRows)
                    {
                        lst_ids_ABorrar.Add(long.Parse(dgvr.Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id)].Value.ToString()));
                    }

                    Pregunta_Borrar_Registro(lst_ids_ABorrar);
                }
                else
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_LISTADOS_NOHAYREGISTROSSELECCIONADOS());
                }
            }
        }
        #endregion

        #region Ordenar
        private void ex_btn_Preguntas_OrdenListado_Click(object sender, EventArgs e)
        {
            //Esta Descedente
            if (ex_btn_Preguntas_OrdenListado.Tag.ToString().Equals("1"))
            {
                Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_Preguntas_OrdenListado);
            }
            //Esta Ascendente
            else
            {
                Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_Preguntas_OrdenListado);
            }

            Listado_Preguntas_Ordenar_DataGridView();
        }
        private void ex_dgv_Preguntas_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            try
            {
                //Mostrar u Ocultar las columnas
                if (e.Button == MouseButtons.Left)
                {
                    string str_CambioOrdenAnterior = "";
                    if (ex_cbo_Preguntas_OrdenListado.SelectedItem != null)
                    {
                        str_CambioOrdenAnterior = ((INTERNO_ComboBox_Modelo)ex_cbo_Preguntas_OrdenListado.SelectedItem).Identificador;
                    }

                    //Seleccionar la columna en el Combo de orden
                    ex_cbo_Preguntas_OrdenListado.SelectedItem = ex_cbo_Preguntas_OrdenListado.Items.Cast<INTERNO_ComboBox_Modelo>().Where(m => m.Identificador.Equals(ex_dgv_Preguntas.Columns[e.ColumnIndex].Name)).FirstOrDefault();

                    if (str_CambioOrdenAnterior.Equals(((INTERNO_ComboBox_Modelo)ex_cbo_Preguntas_OrdenListado.SelectedItem).Identificador))
                    {
                        //Si estaba Ascendente lo pongo descendente
                        if (ex_dgv_Preguntas.SortOrder == SortOrder.Ascending)
                        {
                            Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_Preguntas_OrdenListado);
                        }
                        //Si estaba descendente lo pongo Ascendente
                        else
                        {
                            Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_Preguntas_OrdenListado);
                        }
                    }

                    Listado_Preguntas_Ordenar_DataGridView();
                }
            }
            catch
            { }
        }
        private void ex_cbo_Preguntas_OrdenListado_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Saber el Tipo de Ordenacion .................................
            ListSortDirection obj_ListSortDirection = ListSortDirection.Ascending;
            if (ex_btn_Preguntas_OrdenListado.Tag.ToString().Equals("1"))
            {
                obj_ListSortDirection = ListSortDirection.Descending;
            }
            //..............................................................

            //Cambiar el tipo Orden en Listado
            ex_dgv_Preguntas.Sort(ex_dgv_Preguntas.Columns[((INTERNO_ComboBox_Modelo)ex_cbo_Preguntas_OrdenListado.SelectedItem).Identificador], obj_ListSortDirection);

            Listado_Preguntas_Ordenar_DataGridView();
        }

        public void Listado_Preguntas_Ordenar_DataGridView()
        {
            try
            {
                if (ex_dgv_Preguntas.Rows.Count > 0)
                {
                    //Saber el Tipo de Ordenacion .................................
                    ListSortDirection obj_ListSortDirection = ListSortDirection.Ascending;
                    if (ex_btn_Preguntas_OrdenListado.Tag.ToString().Equals("1"))
                    {
                        obj_ListSortDirection = ListSortDirection.Descending;
                    }
                    //..............................................................

                    if (ex_cbo_Preguntas_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)ex_cbo_Preguntas_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                    {
                        ex_dgv_Preguntas.Sort(ex_dgv_Preguntas.Columns[((INTERNO_ComboBox_Modelo)ex_cbo_Preguntas_OrdenListado.SelectedItem).Identificador], obj_ListSortDirection);
                    }
                    else
                    {
                        ex_dgv_Preguntas.Sort(ex_dgv_Preguntas.Columns[g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas.ORDENACION_NOMBRECOLUMNA_PORDEFECTO()], obj_ListSortDirection);
                    }
                }
            }
            catch (Exception)
            { }
        }

        #endregion

        #region Filtros
        private void ex_btn_Preguntas_Filtros_Click(object sender, EventArgs e)
        {
            MostrarOcultar_Columnas_Y_Fitros_Preguntas(ex_btn_Preguntas_Filtros.Location.X, 0);
        }

        private void MostrarOcultar_Columnas_Y_Fitros_Preguntas(int _int_PosicionX, int _int_PosicionY)
        {
            PE_Listados_Filtros frm_PE_Listados_Filtros = new PE_Listados_Filtros(g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas, ex_dgv_Preguntas.Columns, g_dct_ListadoFiltros_MYT_EstructurasPartesPeticionDatos_Preguntas);

            frm_PE_Listados_Filtros.ShowDialog();

            if (frm_PE_Listados_Filtros.g_bol_BotonAceptar)
            {
                //Mostrar/Ocultar las Columnas que no esten en el Listado
                g_lst_ColumnasAMostrar_MYT_EstructurasPartesPeticionDatos_Preguntas = frm_PE_Listados_Filtros.g_lst_ColumnasAMostrar;

                foreach (DataGridViewColumn dgvc_ColumnasActuales in ex_dgv_Preguntas.Columns)
                {
                    //Mostrar
                    if (g_lst_ColumnasAMostrar_MYT_EstructurasPartesPeticionDatos_Preguntas.Contains(dgvc_ColumnasActuales.Name))
                    {
                        dgvc_ColumnasActuales.Visible = true;
                    }
                    //Ocultar
                    else
                    {
                        dgvc_ColumnasActuales.Visible = false;
                    }
                }

                //Rellenar los nuevos filtros
                g_dct_ListadoFiltros_MYT_EstructurasPartesPeticionDatos_Preguntas = frm_PE_Listados_Filtros.g_dct_ListadoFiltros.ToDictionary(entry => entry.Key, entry => entry.Value);

                //Recargar el Listado
                Rellenar_DataGrid_Preguntas();
            }
        }
        #endregion

        #region Mover 
        private bool g_bol_TienePreguntaSeleccionada = false;
        private void ex_dgv_Preguntas_MouseDown(object sender, MouseEventArgs e)
        {
            g_bol_TienePreguntaSeleccionada = false;
            if (e.Button != MouseButtons.Left)
                return;

            ex_dgv_Preguntas.MouseMove += ex_dgv_Preguntas_MouseMove;
        }
        private void ex_dgv_Preguntas_MouseMove(object sender, MouseEventArgs e)
        {
            if (g_bol_TienePreguntaSeleccionada == false)
            {
                g_bol_TienePreguntaSeleccionada = true;

                ex_dgv_Preguntas.MouseMove -= ex_dgv_Preguntas_MouseMove;

                if (e.Button != MouseButtons.Left)
                    return;

                List<DataGridViewRow> lst_Rows = new List<DataGridViewRow>();

                foreach (DataGridViewRow dgvr_Parte in ex_dgv_Preguntas.SelectedRows)
                {
                    lst_Rows.Add(dgvr_Parte);
                }

                ex_dgv_Preguntas.DoDragDrop(lst_Rows, DragDropEffects.Move);
            }
        }

        #endregion

        #region Cambio Seleccion DataGridView
        private void ex_dgv_Preguntas_SelectionChanged(object sender, EventArgs e)
        {
            try
            {

                INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = null;

                if (ex_dgv_Preguntas.Rows.Count > 0 &&
                    ex_dgv_Preguntas.SelectedRows.Count > 0)
                {
                    long lng_idEstructuraPartePeticionDatosPregunta = long.Parse(ex_dgv_Preguntas.SelectedRows[0].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id)].Value.ToString());

                    if (g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null &&
                        g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Count > 0)
                    {
                        mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Where(m => m.id == lng_idEstructuraPartePeticionDatosPregunta).FirstOrDefault();
                    }
                }

                ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas.Cargar(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo, g_lng_idPregunta_Nuevos);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(ex_dgv_Preguntas_SelectionChanged));
            }
        }
        #endregion

        private void ex_dgv_Preguntas_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {

            if (ex_dgv_Preguntas.Columns[e.ColumnIndex].Name == nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto))
            {
                //Seleccionar una Respuesta
                if (ex_dgv_Preguntas[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo), e.RowIndex].Value.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                {
                    //Color Fondo
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_FONDO;
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.SelectionBackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_FONDO;

                    //Color Letra
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_LETRA;
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.SelectionForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_LETRA;
                }
                //Seleccionar una o varias respuestas
                else if (ex_dgv_Preguntas[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo), e.RowIndex].Value.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNAOVARIASRESPUESTA.Codigo)
                {
                    //Color Fondo
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_FONDO;
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.SelectionBackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_FONDO;

                    //Color Letra
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_LETRA;
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.SelectionForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_LETRA;
                }
                //Escribir texto
                else
                {
                    //Color Fondo
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_FONDO;
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.SelectionBackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_FONDO;

                    //Color Letra
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_LETRA;
                    ex_dgv_Preguntas.Rows[e.RowIndex].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Tipo_Texto)].Style.SelectionForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_LETRA;
                }
            }
        }

        #endregion

        #region Control preguntas
        private void ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas_AceptarCambios_Click(object sender, EventArgs e)
        {
            try
            {
                Pregunta_Actualizar_Registro();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas_AceptarCambios_Click));
            }
        }
        private void ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas_CancelarCambios_Click(object sender, EventArgs e)
        {
            try
            {
                Preguntas_BloquearDesbloquear(false);

                //Cargar Registro Seleccionado
                INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = null;
                if (ex_dgv_Preguntas.Rows.Count > 0 &&
                    ex_dgv_Preguntas.SelectedRows.Count > 0)
                {
                    long lng_idEstructuraPartePeticionDatosPregunta = long.Parse(ex_dgv_Preguntas.SelectedRows[0].Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id)].Value.ToString());

                    if (g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null &&
                        g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Count > 0)
                    {
                        mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Where(m => m.id == lng_idEstructuraPartePeticionDatosPregunta).FirstOrDefault();
                    }
                }

                ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas.Cargar(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo, g_lng_idPregunta_Nuevos);

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas_CancelarCambios_Click));
            }
        }
        #endregion

        #region Rellenar DataGrid Preguntas
        private bool g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Preguntas = false;
        public void Rellenar_DataGrid_Preguntas()
        {
            try
            {

                if (g_TareaAsincrona_Rellenar_DataGrid_Preguntas != null)
                {
                    g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Preguntas = true;
                    while (g_TareaAsincrona_Rellenar_DataGrid_Preguntas.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    //(Tarea Asincrona) Cargar Listado de Preguntas ########################################
                    g_TareaAsincrona_Rellenar_DataGrid_Preguntas = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_Preguntas.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Preguntas_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_Preguntas.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Preguntas_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_Preguntas.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Preguntas_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_Preguntas.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_Preguntas.WorkerSupportsCancellation = true;
                    //####################################################################################
                }

                g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Preguntas = false;

                //Vaciar el Listado
                ex_dgv_Preguntas.Rows.Clear();
                g_int_Preguntas_TotalRegistrosInsertados = 0;
                ex_pgb_Preguntas_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                ex_pgb_Preguntas_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_Preguntas.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Rellenar_DataGrid_Preguntas));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_Preguntas_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {

                List<INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo> lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = Filtrar_Preguntas();

                if (lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null)
                {
                    //Recorrer campos Long_Text para saber si lo pongo tipo text o tipo long
                    foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Preguntas_Columnas.Where(m => m.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT)).ToList())
                    {
                        int int_HayTextos = lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Select(m => m.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(m)).ToList().Where(m => !Funciones.IsLong(m.ToString())).Count();

                        if (int_HayTextos > 0)
                        {
                            mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato = G_ENUM_TIPOSDATOS.TEXT;

                            g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas.LISTADO_COLUMNAS().Where(m => m.Key.Equals(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)).FirstOrDefault().Value.TipoDato = G_ENUM_TIPOSDATOS.TEXT;
                        }
                    }

                    ex_pgb_Preguntas_BarraProgreso.Exferia_BarraProgreso_Total = lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Count;

                    object[] row;
                    foreach (INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo in lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo)
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Preguntas)
                        {
                            e.Cancel = true;
                            return;
                        }


                        //Añadir Fila con Columnas .............................
                        row = Funciones_Listado.Transformar_Dynamic_A_Row(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo, g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas);

                        //Llamar al Progress
                        g_int_Preguntas_TotalRegistrosInsertados += 1;

                        ((BackgroundWorker)sender).ReportProgress(1, row);

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Preguntas_DoWork));
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Preguntas_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Preguntas_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                ex_dgv_Preguntas.Rows.Add((object[])e.UserState);

                ex_pgb_Preguntas_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_Preguntas_TotalRegistrosInsertados;

            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Preguntas_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public List<INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo> Filtrar_Preguntas()
        {
            //Filtros Avanzados
            if (g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null)
            {
                if (g_dct_ListadoFiltros_MYT_EstructurasPartesPeticionDatos_Preguntas != null && g_dct_ListadoFiltros_MYT_EstructurasPartesPeticionDatos_Preguntas.Count > 0)
                {
                    return g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo>(g_dct_ListadoFiltros_MYT_EstructurasPartesPeticionDatos_Preguntas, g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas)).ToList();
                }
                else
                {
                    return g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.AsQueryable().ToList();
                }
            }
            else
            {
                return null;
            }
        }
        #endregion

        #region Arbol
        public void Crear_Nodo_Principal()
        {
            try
            {

                //Borrar el restro de los nodos si los hubiera
                if (ex_trv_Preguntas.Nodes != null &&
                    ex_trv_Preguntas.Nodes.Count > 0)
                {
                    ex_trv_Preguntas.Nodes.Clear();
                }


                //Agregar la Nodo principal desde donde tirarn todas
                TreeNode trn_NodoSeleccionado = ex_trv_Preguntas.SelectedNode;
                TreeNode trn_Nodo_Principal = new TreeNode(g_str_Padre_NodoPrincipal);

                //Color del nodo
                trn_Nodo_Principal.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_INICIO_FONDO;
                trn_Nodo_Principal.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_INICIO_LETRA;



                trn_Nodo_Principal.Name = g_lng_idPreguntas_Padre_NODOPRINCIPAL.ToString();

                //GUID
                string str_GUID_INICIO = Guid.NewGuid().ToString();
                trn_Nodo_Principal.Tag = new INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo("I", -1, -1, -1, str_GUID_INICIO);

                if (trn_NodoSeleccionado != null)
                {
                    trn_NodoSeleccionado.Nodes.Add(trn_Nodo_Principal);
                    trn_NodoSeleccionado.Expand();
                }
                else
                {
                    ex_trv_Preguntas.Nodes.Add(trn_Nodo_Principal);
                }

                ex_trv_Preguntas.SelectedNode = trn_Nodo_Principal;
                ex_trv_Preguntas.Select();



            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Crear_Nodo_Principal));
            }
        }

        private void ex_trv_Preguntas_ItemDrag(object sender, ItemDragEventArgs e)
        {
            //Mueve el nodo usando el click izquierdo del raton.
            if (e.Button == MouseButtons.Left)
            {
                DoDragDrop(e.Item, DragDropEffects.Move);
            }
        }

        private void ex_trv_Preguntas_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private void ex_trv_Preguntas_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                // Recupera las coordenadas de la posicion del raton
                Point Posicion = ex_trv_Preguntas.PointToClient(new Point(e.X, e.Y));

                // Recupera la posicion de colocacion del nodo
                TreeNode trn_Nodo_Objetivo = ex_trv_Preguntas.GetNodeAt(Posicion);

                //Si se mueve el nodo
                if (e.Data.GetData(typeof(TreeNode)) != null)
                {
                    // Recupera el nodo que fue arrastrado
                    TreeNode trn_Nodo_En_Movimiento = (TreeNode)e.Data.GetData(typeof(TreeNode));
                    if (trn_Nodo_Objetivo != null)
                    {
                        //Confirma si el nodo esta en la posicion de colocacion y si es un nodo o un descendiente de nodo
                        if (!trn_Nodo_En_Movimiento.Equals(trn_Nodo_Objetivo) &&
                            SePuedeMover(trn_Nodo_En_Movimiento, trn_Nodo_Objetivo))
                        {
                            //Si se trata de un movimiento, elimina el nodo y lo agrega al nodo de colocacion
                            if (e.Effect == DragDropEffects.Move)
                            {
                                //Quitar el idPreguntaRelacionada del padre del nodoMovimiento si lo tuviera ..................
                                INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA = null;
                                INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_En_Movimiento.Parent.Tag;
                                //Tiene que ser respuesta o el principal
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE != null &&
                                   mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE.PreguntaRespuestaInicio == "R")
                                {
                                    //Tiene que ser del tipo 'Solo seleccionar una respuesta'
                                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE.Tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                                    {
                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE_DELPADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_En_Movimiento.Parent.Parent.Tag;

                                        //Busco la pregunta
                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE_DELPADRE.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE_DELPADRE.IdentificadorUnico);
                                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR != null &&
                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas != null &&
                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Count > 0)
                                        {
                                            //Busco la respuesta
                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Where(m => m.idRespuesta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE.IdRespuesta).FirstOrDefault();
                                        }
                                    }
                                }

                                //Añadir de nuevo el nodo ...................................................................
                                trn_Nodo_En_Movimiento.Remove();
                                trn_Nodo_Objetivo.Nodes.Add(trn_Nodo_En_Movimiento);

                                //Añadir al nodo objetivo si es una respuesta el idPreguntaRelacionada ......................
                                INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Objetivo.Tag;

                                //Tiene que ser respuesta o el principal
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO != null &&
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO.PreguntaRespuestaInicio == "R")
                                {
                                    //Tiene que ser del tipo 'Solo seleccionar una respuesta'
                                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO.Tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                                    {
                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO_PADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Objetivo.Parent.Tag;


                                        //Busco la Pregunta
                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO_PADRE.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO_PADRE.IdentificadorUnico);
                                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR != null &&
                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas != null &&
                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Count > 0)
                                        {
                                            //Busco la Respuesta
                                            INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Where(m => m.idRespuesta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO.IdRespuesta).FirstOrDefault();

                                            if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo != null)
                                            {
                                                //Actualizo el Modelo de Pregunta
                                                INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_En_Movimiento.Tag;

                                                INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_MOVIMIENTO = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.IdentificadorUnico);
                                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_MOVIMIENTO;
                                            }
                                        }
                                    }
                                }


                                //Se borra la pregunta relacionada de la respuesta antigua
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA != null)
                                {
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA.PreguntaRelacionada = null;
                                }

                            }

                            //Expande el nodo
                            trn_Nodo_Objetivo.Expand();
                        }
                    }
                }
                //Listado de EstructuraPartePeticionDatoss Seleccionados
                else if (e.Data.GetData(typeof(List<DataGridViewRow>)) != null)
                {
                    List<DataGridViewRow> lst_Rows = (List<DataGridViewRow>)e.Data.GetData(typeof(List<DataGridViewRow>));

                    if (lst_Rows != null && lst_Rows.Count > 0)
                    {
                        if (trn_Nodo_Objetivo != null)
                        {
                            //Si se trata de un movimiento, elimina el nodo y lo agrega al nodo de colocacion
                            if (e.Effect == DragDropEffects.Move)
                            {
                                //Ver si el nodo origien se puede arrastrar otos nodos
                                INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Objetivo.Tag;

                                //Tiene que ser respuesta o el principal
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN != null &&
                                    (
                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.PreguntaRespuestaInicio == "R" ||
                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.PreguntaRespuestaInicio == "I"
                                    ))
                                {
                                    bool bol_Insertar = false;
                                    //Tiene que ser del tiop 'Solo seleccionar una respuesta'
                                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.PreguntaRespuestaInicio == "I")
                                    {
                                        bol_Insertar = true;
                                    }
                                    else if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.Tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                                    {
                                        //No puede tener mas de una pregunta relacionada
                                        if (trn_Nodo_Objetivo.Nodes == null ||
                                            trn_Nodo_Objetivo.Nodes.Count == 0)
                                        {
                                            bol_Insertar = true;
                                        }
                                    }

                                    if (bol_Insertar)
                                    {
                                        TreeNode trn_NodoNuevo_Pregunta = null;
                                        TreeNode trn_NodoNuevo_Respuesta = null;

                                        INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = null;

                                        int int_OrdenPreguntas = 0;
                                        if (trn_Nodo_Objetivo.Nodes != null &&
                                            trn_Nodo_Objetivo.Nodes.Count > 0)
                                        {
                                            int_OrdenPreguntas = trn_Nodo_Objetivo.Nodes.Count;
                                        }
                                        //Añadimos tantos nodos como filas haya
                                        foreach (DataGridViewRow dgvr_Filas in lst_Rows)
                                        {
                                            //Modelo a añadir como nodo
                                            mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Where(m => m.id == long.Parse(dgvr_Filas.Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id)].Value.ToString())).FirstOrDefault();

                                            if (mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null)
                                            {
                                                //Pregunta
                                                trn_NodoNuevo_Pregunta = new TreeNode(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.descripcion);

                                                //GUID
                                                string str_GUID_PREGUNTA = Guid.NewGuid().ToString();

                                                // Seleccionar una respuesta 
                                                if (mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                                                {
                                                    trn_NodoNuevo_Pregunta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_FONDO;
                                                    trn_NodoNuevo_Pregunta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_LETRA;
                                                }
                                                //Seleccionar una o varias respuestas
                                                else if (mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNAOVARIASRESPUESTA.Codigo)
                                                {
                                                    trn_NodoNuevo_Pregunta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_FONDO;
                                                    trn_NodoNuevo_Pregunta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_LETRA;
                                                }
                                                //Escribir Texto
                                                else
                                                {
                                                    trn_NodoNuevo_Pregunta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_FONDO;
                                                    trn_NodoNuevo_Pregunta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_LETRA;
                                                }

                                                //Nombre
                                                trn_NodoNuevo_Pregunta.Name = mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id.ToString();

                                                //Tag
                                                trn_NodoNuevo_Pregunta.Tag = new INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo("P", mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo, mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id, -1, str_GUID_PREGUNTA);

                                                //Añadir
                                                trn_Nodo_Objetivo.Nodes.Add(trn_NodoNuevo_Pregunta);

                                                //MODELO .................................
                                                INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = new INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo();
                                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.idPregunta = mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id;
                                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.tipo = mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo;
                                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.orden = int_OrdenPreguntas;
                                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.IdentificadorUnico = str_GUID_PREGUNTA;

                                                //Respuestas ....................................................
                                                if (mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.MYT_EstructurasPartesPeticionDatos_Repuestas != null &&
                                                    mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.MYT_EstructurasPartesPeticionDatos_Repuestas.Count > 0)
                                                {
                                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas = new List<INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo>();

                                                    int int_Orden_Respuestas = 0;
                                                    foreach (MYT_EstructurasPartesPeticionDatos_Repuestas mdl_MYT_EstructurasPartesPeticionDatos_Repuestas in mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.MYT_EstructurasPartesPeticionDatos_Repuestas)
                                                    {
                                                        //GUID
                                                        string str_GUID_RESPUESTA = Guid.NewGuid().ToString();

                                                        //Respuesta
                                                        trn_NodoNuevo_Respuesta = new TreeNode(mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.texto);

                                                        // Color 
                                                        trn_NodoNuevo_Respuesta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_RESPUESTAS_FONDO;
                                                        trn_NodoNuevo_Respuesta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_RESPUESTAS_LETRA;

                                                        //Nombre
                                                        trn_NodoNuevo_Respuesta.Name = mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.id.ToString();

                                                        //Tag
                                                        trn_NodoNuevo_Respuesta.Tag = new INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo("R", mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo, mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.idEstructuraPartePeticionDatoPregunta, mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.id, str_GUID_RESPUESTA);

                                                        //Añadir
                                                        trn_NodoNuevo_Pregunta.Nodes.Add(trn_NodoNuevo_Respuesta);

                                                        //MODELO ...................................
                                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo = new INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo();
                                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.idRespuesta = mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.id;
                                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada = null;
                                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.orden = int_Orden_Respuestas;
                                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.IdentificadorUnico = str_GUID_RESPUESTA;

                                                        //Añadir al listado
                                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.Add(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo);

                                                        int_Orden_Respuestas += 1;
                                                    }
                                                }

                                                //Seleccionar Nodo
                                                ex_trv_Preguntas.SelectedNode = trn_NodoNuevo_Pregunta;
                                                ex_trv_Preguntas.Select();

                                                //Expande el nodo
                                                trn_NodoNuevo_Pregunta.Expand();


                                                //Añadir al listado general del Arbol ..............................

                                                //Si lo añadi a una respuesta, poner el idPreguntaRelacionada en la respuesta
                                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.PreguntaRespuestaInicio == "R")
                                                {
                                                    //Buscar Pregunta Padre
                                                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN_PADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Objetivo.Parent.Tag;

                                                    //Buscar la Pregunta
                                                    INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN_PADRE.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN_PADRE.IdentificadorUnico);
                                                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR != null &&
                                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas != null &&
                                                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Count > 0)
                                                    {
                                                        //Buscar la Respuesta
                                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Where(m => m.idRespuesta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.IdRespuesta).FirstOrDefault();

                                                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo != null)
                                                        {
                                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo;
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Add(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo);
                                                }

                                                int_OrdenPreguntas += 1;
                                            }
                                        }

                                        //Expande el nodo
                                        trn_Nodo_Objetivo.Expand();
                                    }
                                }
                            }
                        }
                    }
                }
                //Si es para Finalizar
                else if (e.Data.GetData(typeof(Button)) != null)
                {
                    if (trn_Nodo_Objetivo != null)
                    {
                        //Si se trata de un movimiento, elimina el nodo y lo agrega al nodo de colocacion
                        if (e.Effect == DragDropEffects.Move)
                        {
                            //Ver si el nodo origen se puede arrastrar otros nodos
                            INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Objetivo.Tag;

                            //Tiene que ser respuesta 
                            if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN != null &&
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.PreguntaRespuestaInicio == "R")
                            {
                                bool bol_Insertar = false;
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.Tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                                {
                                    //No puede tener mas de una pregunta relacionada
                                    if (trn_Nodo_Objetivo.Nodes == null ||
                                        trn_Nodo_Objetivo.Nodes.Count == 0)
                                    {
                                        bol_Insertar = true;
                                    }
                                }

                                if (bol_Insertar)
                                {
                                    //Finalizador
                                    TreeNode trn_NodoNuevo_Finalizador = new TreeNode(g_str_Nodo_FINALIZADOR);

                                    //GUID
                                    string str_GUID_FINALIZADOR = Guid.NewGuid().ToString();

                                    // Color 
                                    trn_NodoNuevo_Finalizador.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_FONDO;
                                    trn_NodoNuevo_Finalizador.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_LETRA;

                                    //Nombre
                                    trn_NodoNuevo_Finalizador.Name = g_lng_idPreguntas_FINALIZADOR.ToString();

                                    //Tag
                                    trn_NodoNuevo_Finalizador.Tag = new INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo("F", -1, g_lng_idPreguntas_FINALIZADOR, -1, str_GUID_FINALIZADOR);

                                    //Añadir
                                    trn_Nodo_Objetivo.Nodes.Add(trn_NodoNuevo_Finalizador);

                                    //MODELO .................................
                                    INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = new INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo();
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.idPregunta = g_lng_idPreguntas_FINALIZADOR;
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.tipo = -1;
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.orden = 0;
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.IdentificadorUnico = str_GUID_FINALIZADOR;

                                    //Seleccionar Nodo
                                    ex_trv_Preguntas.SelectedNode = trn_NodoNuevo_Finalizador;
                                    ex_trv_Preguntas.Select();


                                    //Añadir al listado general del Arbol ..............................

                                    //Si lo añadi a una respuesta, poner el idPreguntaRelacionada en la respuesta
                                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.PreguntaRespuestaInicio == "R")
                                    {
                                        //Buscar Pregunta Padre
                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN_PADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Objetivo.Parent.Tag;

                                        //Buscar la Pregunta
                                        INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN_PADRE.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN_PADRE.IdentificadorUnico);
                                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR != null &&
                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas != null &&
                                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Count > 0)
                                        {
                                            //Buscar la Respuesta
                                            INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Where(m => m.idRespuesta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_ORIGEN.IdRespuesta).FirstOrDefault();

                                            if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo != null)
                                            {
                                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Add(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo);
                                    }

                                    //Expande el nodo
                                    trn_Nodo_Objetivo.Expand();
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(ex_trv_Preguntas_DragDrop));
            }
        }
        private bool SePuedeMover(TreeNode _trn_Movimiento, TreeNode _trn_Objetivo)
        {
            bool bol_SePuedeMover = false;
            try
            {
                //El Nodo Moviemiento tiene que ser una pregunta o un Finalizador
                INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_Movimiento.Tag;
                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.PreguntaRespuestaInicio == "P" ||
                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.PreguntaRespuestaInicio == "F")
                {
                    //El Nodo Objetivo tiene que ser una respuesta o el principal, si es una respuesta no puede tener mas preguntas relacionadas
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_Objetivo.Tag;

                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO != null &&
                        (
                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO.PreguntaRespuestaInicio == "R" ||
                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO.PreguntaRespuestaInicio == "I"
                        ))
                    {
                        //Es el principal
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO.PreguntaRespuestaInicio == "I")
                        {
                            bol_SePuedeMover = true;
                        }
                        //Tiene que ser del tiop 'Solo seleccionar una respuesta'
                        else if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_OBJETIVO.Tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                        {
                            //No puede tener mas de una pregunta relacionada
                            if (_trn_Objetivo.Nodes == null ||
                                _trn_Objetivo.Nodes.Count == 0)
                            {
                                bol_SePuedeMover = true;
                            }
                        }
                    }

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(SePuedeMover));
            }

            return bol_SePuedeMover;
        }

        private void ex_trv_Preguntas_DragOver(object sender, DragEventArgs e)
        {
            try
            {
                // Recupera las coordenadas de la posicion del raton
                Point Posicion = ex_trv_Preguntas.PointToClient(new Point(e.X, e.Y));

                // Seleciona el nodo en la posicion del ratón
                ex_trv_Preguntas.SelectedNode = ex_trv_Preguntas.GetNodeAt(Posicion);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(ex_trv_Preguntas_DragOver));
            }
        }

        #region Botones
        private void ex_btn_EliminarPregunta_Click(object sender, EventArgs e)
        {
            Eliminar_Nodo();
        }
        private void Eliminar_Nodo()
        {
            try
            {
                TreeNode trn_NodoSeleccionado_PADRE = null;//Se utiliza para seleccionar un nodo, cuando termine de borrar

                TreeNode trn_NodoSeleccionado = ex_trv_Preguntas.SelectedNode;
                if (trn_NodoSeleccionado != null && long.Parse(trn_NodoSeleccionado.Name) != -1)
                {

                    //Guardar el padre
                    trn_NodoSeleccionado_PADRE = trn_NodoSeleccionado.Parent;

                    //Borrar Nodos
                    Arbol_Eliminar_Nodo(trn_NodoSeleccionado);

                    //Seleccionar el padre del nodo borrado
                    if (trn_NodoSeleccionado_PADRE != null)
                    {
                        ex_trv_Preguntas.SelectedNode = trn_NodoSeleccionado_PADRE;
                        ex_trv_Preguntas.Select();
                    }

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Eliminar_Nodo));
            }
        }

        private void ex_btn_PrimeroNodo_Click(object sender, EventArgs e)
        {
            Mover_Nodo_Al_Primero();
        }
        private void Mover_Nodo_Al_Primero()
        {
            try
            {
                TreeNode trn_NodoSeleccionado = ex_trv_Preguntas.SelectedNode;
                if (trn_NodoSeleccionado != null)
                {
                    //Si es Inicio no se hace nada
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_NodoSeleccionado.Tag;

                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "P" ||
                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                    {
                        int int_Posicion_OLD = trn_NodoSeleccionado.Index;

                        TreeNode trn_nodoPadre = trn_NodoSeleccionado.Parent;
                        int int_Nueva_Posicion = 0;

                        trn_NodoSeleccionado.Remove();
                        trn_nodoPadre.Nodes.Insert(int_Nueva_Posicion, trn_NodoSeleccionado);

                        //Actualizar el orden
                        //Respuesta
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                        {
                            Respuestas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 1);
                        }
                        //Pregunta
                        else
                        {
                            Preguntas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 1);
                        }

                        //Seleccionar
                        ex_trv_Preguntas.SelectedNode = trn_NodoSeleccionado;
                        ex_trv_Preguntas.Select();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Mover_Nodo_Al_Primero));
            }
        }

        private void ex_btn_SubirNodo_Click(object sender, EventArgs e)
        {
            Mover_Subir_Nodo();
        }
        private void Mover_Subir_Nodo()
        {
            try
            {
                TreeNode trn_NodoSeleccionado = ex_trv_Preguntas.SelectedNode;
                if (trn_NodoSeleccionado != null)
                {
                    //Si es Inicio no se hace nada
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_NodoSeleccionado.Tag;

                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "P" ||
                       mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                    {
                        int int_Posicion_OLD = trn_NodoSeleccionado.Index;

                        TreeNode trn_nodoPadre = trn_NodoSeleccionado.Parent;
                        int int_Nueva_Posicion = trn_nodoPadre.Nodes.IndexOf(trn_NodoSeleccionado) - 1;

                        trn_NodoSeleccionado.Remove();
                        trn_nodoPadre.Nodes.Insert(int_Nueva_Posicion, trn_NodoSeleccionado);

                        //Actualizar el orden
                        //Respuesta
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                        {
                            Respuestas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 3);
                        }
                        //Pregunta
                        else
                        {
                            Preguntas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 3);
                        }

                        //Seleccionar
                        ex_trv_Preguntas.SelectedNode = trn_NodoSeleccionado;
                        ex_trv_Preguntas.Select();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Mover_Subir_Nodo));
            }
        }

        private void ex_btn_BajarNodo_Click(object sender, EventArgs e)
        {
            Mover_Bajar_Nodo();
        }
        private void Mover_Bajar_Nodo()
        {
            try
            {
                TreeNode trn_NodoSeleccionado = ex_trv_Preguntas.SelectedNode;
                if (trn_NodoSeleccionado != null)
                {
                    //Si es Inicio no se hace nada
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_NodoSeleccionado.Tag;

                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "P" ||
                       mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                    {
                        int int_Posicion_OLD = trn_NodoSeleccionado.Index;

                        TreeNode trn_NodoPadre = trn_NodoSeleccionado.Parent;
                        int int_Nueva_Posicion = trn_NodoPadre.Nodes.IndexOf(trn_NodoSeleccionado) + 1;

                        trn_NodoSeleccionado.Remove();
                        trn_NodoPadre.Nodes.Insert(int_Nueva_Posicion, trn_NodoSeleccionado);

                        //Actualizar el orden
                        //Respuesta
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                        {
                            Respuestas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 4);
                        }
                        //Pregunta
                        else
                        {
                            Preguntas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 4);
                        }

                        //Seleccionar
                        ex_trv_Preguntas.SelectedNode = trn_NodoSeleccionado;
                        ex_trv_Preguntas.Select();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Mover_Bajar_Nodo));
            }
        }

        private void ex_btn_UltimoNodo_Click(object sender, EventArgs e)
        {
            Mover_Nodo_Al_Ultimo();
        }
        private void Mover_Nodo_Al_Ultimo()
        {
            try
            {
                TreeNode trn_NodoSeleccionado = ex_trv_Preguntas.SelectedNode;
                if (trn_NodoSeleccionado != null)
                {
                    //Si es Inicio no se hace nada
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_NodoSeleccionado.Tag;

                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "P" ||
                       mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                    {
                        int int_Posicion_OLD = trn_NodoSeleccionado.Index;

                        TreeNode trn_nodoPadre = trn_NodoSeleccionado.Parent;
                        int int_Nueva_Posicion = trn_nodoPadre.Nodes[trn_nodoPadre.Nodes.Count - 1].Index;

                        trn_NodoSeleccionado.Remove();
                        trn_nodoPadre.Nodes.Insert(int_Nueva_Posicion, trn_NodoSeleccionado);

                        //Actualizar el orden
                        //Respuesta
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.PreguntaRespuestaInicio == "R")
                        {
                            Respuestas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 2);
                        }
                        //Pregunta
                        else
                        {
                            Preguntas_Actualizar_Orden(int_Posicion_OLD, int_Nueva_Posicion, trn_NodoSeleccionado, 2);
                        }


                        //Seleccionar
                        ex_trv_Preguntas.SelectedNode = trn_NodoSeleccionado;
                        ex_trv_Preguntas.Select();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Mover_Nodo_Al_Ultimo));
            }
        }

        private void Preguntas_Actualizar_Orden(int _int_OrdenAntiguo, int _int_OrdenNuevo, TreeNode _trn_NodoSeleccionado, int _int_PrimeroUltimoSubirBajar)
        {
            try
            {
                //Buscar el Nodo Padre para Aumentar el resto de los nodos el orden
                TreeNode trn_Nodo_Padre = _trn_NodoSeleccionado.Parent;
                if (trn_Nodo_Padre != null)
                {
                    //Recorrer los nodos Hijos
                    foreach (TreeNode trn_Nodo_Hijo in trn_Nodo_Padre.Nodes)
                    {
                        INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_HIJO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Hijo.Tag;
                        INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_HIJO.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_HIJO.IdentificadorUnico);

                        //Si se pulso el subir al primero, aumentar 1 el orden de todos hasta mi orden antiguo
                        if (_int_PrimeroUltimoSubirBajar == 1)
                        {
                            if (_int_OrdenAntiguo >= mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden += 1;
                            }
                        }
                        //Si se pulso el bajar al ultimo, disminuir 1 el orden de todos desde mi orden antiguo
                        else if (_int_PrimeroUltimoSubirBajar == 2)
                        {
                            if (_int_OrdenAntiguo <= mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden -= 1;
                            }
                        }
                        //Si se pulso el subir uno, se aumenta solo el que tenga el nuevo orden
                        else if (_int_PrimeroUltimoSubirBajar == 3)
                        {
                            if (_int_OrdenNuevo == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden += 1;
                            }
                        }
                        //Si se pulso el bajar uno, se disminuye solo el que tenga el nuevo orden
                        else if (_int_PrimeroUltimoSubirBajar == 4)
                        {
                            if (_int_OrdenNuevo == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTUALIZAR.orden -= 1;
                            }
                        }
                    }

                    //Actualiazr el Seleccionado
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_NodoSeleccionado.Tag;
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_SELECCIONADO = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.IdentificadorUnico);
                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_SELECCIONADO.orden = _int_OrdenNuevo;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Preguntas_Actualizar_Orden));
            }
        }
        private void Respuestas_Actualizar_Orden(int _int_OrdenAntiguo, int _int_OrdenNuevo, TreeNode _trn_NodoSeleccionado, int _int_PrimeroUltimoSubirBajar)
        {
            try
            {
                //Buscar el Nodo Padre para Aumentar el resto de los nodos el orden
                TreeNode trn_Nodo_Padre = _trn_NodoSeleccionado.Parent;
                if (trn_Nodo_Padre != null)
                {
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_PADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_NodoSeleccionado.Parent.Tag;
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_PADRE = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_PADRE.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_PADRE.IdentificadorUnico);

                    //Recorrer los nodos Hijos
                    foreach (TreeNode trn_Nodo_Hijo in trn_Nodo_Padre.Nodes)
                    {
                        INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_HIJO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_Hijo.Tag;
                        INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_PADRE.Respuestas.Where(M => M.idRespuesta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_HIJO.IdRespuesta && M.IdentificadorUnico == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_HIJO.IdentificadorUnico).FirstOrDefault();


                        //Si se pulso el subir al primero, aumentar 1 el orden de todos hasta mi orden antiguo
                        if (_int_PrimeroUltimoSubirBajar == 1)
                        {
                            if (_int_OrdenAntiguo >= mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden += 1;
                            }
                        }
                        //Si se pulso el bajar al ultimo, disminuir 1 el orden de todos desde mi orden antiguo
                        else if (_int_PrimeroUltimoSubirBajar == 2)
                        {
                            if (_int_OrdenAntiguo <= mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden -= 1;
                            }
                        }
                        //Si se pulso el subir uno, se aumenta solo el que tenga el nuevo orden
                        else if (_int_PrimeroUltimoSubirBajar == 3)
                        {
                            if (_int_OrdenNuevo == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden += 1;
                            }
                        }
                        //Si se pulso el bajar uno, se disminuye solo el que tenga el nuevo orden
                        else if (_int_PrimeroUltimoSubirBajar == 4)
                        {
                            if (_int_OrdenNuevo == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden)
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ACTUALIZAR.orden -= 1;
                            }
                        }
                    }

                    //Actualiazr el Seleccionado
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_NodoSeleccionado.Tag;
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_SELECCIONADO = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_PADRE.Respuestas.Where(M => M.idRespuesta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.IdRespuesta && M.IdentificadorUnico == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_SELECCIONADO.IdentificadorUnico).FirstOrDefault();
                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_SELECCIONADO.orden = _int_OrdenNuevo;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Respuestas_Actualizar_Orden));
            }
        }
        #endregion

        #endregion

        #region Boton Fin de la Peticion de datos
        private void btn_FinalizarPreguntas_MouseDown(object sender, MouseEventArgs e)
        {
            btn_FinalizarPreguntas.DoDragDrop(btn_FinalizarPreguntas, DragDropEffects.Move);
        }
        #endregion

        #region Leyenda
        private void ex_btn_MostrarOcultar_Leyenda_Click(object sender, EventArgs e)
        {
            //Si tiene un 1 en el tag significa que se esta mostrando y hay que ocultarlo
            if (ex_btn_MostrarOcultar_Leyenda.Tag.ToString().Equals("1"))
            {
                pnl_Leyenda.Visible = false;
                ex_trv_Preguntas.Height = (ex_btn_MostrarOcultar_Leyenda.Location.Y - 6) - ex_trv_Preguntas.Location.Y;

                ex_btn_MostrarOcultar_Leyenda.Text = "5";
                ex_btn_MostrarOcultar_Leyenda.Exferia_Button_ToolTip = "Mostrar leyenda";
                ex_btn_MostrarOcultar_Leyenda.Tag = "0";
            }
            //Si tiene un 0 en el tag significa que esta oculto y hay que mostrarlo
            else
            {
                ex_trv_Preguntas.Height = (pnl_Leyenda.Location.Y - 6) - ex_trv_Preguntas.Location.Y;
                pnl_Leyenda.Visible = true;

                ex_btn_MostrarOcultar_Leyenda.Text = "6";
                ex_btn_MostrarOcultar_Leyenda.Exferia_Button_ToolTip = "Ocultar leyenda";
                ex_btn_MostrarOcultar_Leyenda.Tag = "1";
            }
        }
        #endregion

        public void Pregunta_Actualizar_Registro()
        {
            try
            {
                //primero Valido los datos del control
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas.ValidarDatos();
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //Nuevo registro con datos modificados
                    INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO = ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas.Obtener_Para_Actualizar(g_lng_idEstructuraPartePeticionDatoSeccion);

                    //Buscar el Registro para saber si es un insert o un update
                    INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = null;
                    if (g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null && g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Count > 0)
                    {
                        mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Where(m => m.id == mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO.id).FirstOrDefault();
                    }

                    //UPDATE ################################################################################################################
                    if (mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null)
                    {
                        //Actualizar primero el List<> General 
                        g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo[g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.FindIndex(m => m.id.Equals(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id))] = mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO;

                        //Actualizar el DataGridView 
                        DataGridViewRow dgv_Fila = ex_dgv_Preguntas.Rows
                                        .Cast<DataGridViewRow>()
                                        .Where(r => r.Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id)].Value.Equals(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO.id)).FirstOrDefault();

                        if (dgv_Fila != null)
                        {
                            //Actualizar el Grid
                            ex_dgv_Preguntas.Rows[dgv_Fila.Index].SetValues(Funciones_Listado.Transformar_Dynamic_A_Row(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO, g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas));

                            //Ordenar Listado
                            Listado_Preguntas_Ordenar_DataGridView();

                            //Seleccionar
                            ex_dgv_Preguntas.ClearSelection();
                            ex_dgv_Preguntas.Rows[dgv_Fila.Index].Selected = true;
                            ex_dgv_Preguntas.FirstDisplayedScrollingRowIndex = dgv_Fila.Index;
                        }

                        #region Actualizar Arbol
                        foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo in g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo)
                        {
                            Arbol_Actualizar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo, mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO);
                        }
                        //Recargar Arbol
                        Crear_Nodo_Principal();
                        foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo in g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.OrderBy(x => x.orden))
                        {
                            Arbol_Recargar(ex_trv_Preguntas.Nodes[0], mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo);
                        }
                        #endregion
                    }
                    //INSERT ################################################################################################################
                    else
                    {
                        //Insertar primero el List<> General 
                        if (g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo == null)
                        {
                            g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = new List<INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo>();
                        }
                        g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Add(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO);

                        //Actualizar el DataGridView 
                        DataGridViewRow dgv_Fila = ex_dgv_Preguntas.Rows[ex_dgv_Preguntas.Rows.Add(Funciones_Listado.Transformar_Dynamic_A_Row(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_NUEVO, g_obj_ABS_Listado_MYT_EstructurasPartesPeticionDatos_Preguntas))];

                        //Barra de Progreso
                        g_int_Preguntas_TotalRegistrosInsertados += 1;
                        ex_pgb_Preguntas_BarraProgreso.Exferia_BarraProgreso_Total += 1;
                        ex_pgb_Preguntas_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_Preguntas_TotalRegistrosInsertados;

                        //Ordenar Listado
                        Listado_Preguntas_Ordenar_DataGridView();

                        //Seleccionar
                        ex_dgv_Preguntas.ClearSelection();
                        ex_dgv_Preguntas.Rows[dgv_Fila.Index].Selected = true;
                        ex_dgv_Preguntas.FirstDisplayedScrollingRowIndex = dgv_Fila.Index;

                    }


                    Preguntas_BloquearDesbloquear(false);
                }
                else
                {
                    Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo.Mensaje);
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Pregunta_Actualizar_Registro));
            }
        }
        public void Pregunta_Borrar_Registro(List<long> _lst_idEstructuraPartePeticionDatosPregunta)
        {
            try
            {
                //Borrar primero el List<> General ################################################################################
                if (g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo != null && g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Count > 0)
                {
                    List<INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo> lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Where(m => _lst_idEstructuraPartePeticionDatosPregunta.Contains(m.id)).ToList();
                    if (lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_BUSQUEDA != null && lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_BUSQUEDA.Count > 0)
                    {
                        foreach (INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo in lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_BUSQUEDA)
                        {
                            //Borro del listado de tarifaspromocion
                            g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Remove(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo);
                        }
                    }
                }

                //Borrar del DataGridView
                List<DataGridViewRow> lst_DataGridViewRow = ex_dgv_Preguntas.Rows
                                .Cast<DataGridViewRow>()
                                .Where(r => _lst_idEstructuraPartePeticionDatosPregunta.Contains(long.Parse(r.Cells[nameof(INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id)].Value.ToString()))).ToList();

                if (lst_DataGridViewRow != null && lst_DataGridViewRow.Count > 0)
                {
                    //Borrar del Grid
                    foreach (DataGridViewRow dgvr_Borrar in lst_DataGridViewRow)
                    {
                        ex_dgv_Preguntas.Rows.Remove(dgvr_Borrar);
                    }
                }

                //Quitar del Arbol
                Arbol_Eliminar_Nodo_Recursivo(ex_trv_Preguntas.Nodes, _lst_idEstructuraPartePeticionDatosPregunta);

            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Pregunta_Borrar_Registro));
            }
        }

        private void Arbol_Eliminar_Nodo_Recursivo(TreeNodeCollection _lst_Nodos, List<long> _lst_idEstructuraPartePeticionDatosPregunta_ABorrar)
        {
            if (_lst_Nodos != null &&
                _lst_Nodos.Count > 0)
            {
                foreach (TreeNode trn_Nodo_AEliminar in _lst_Nodos)
                {
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)trn_Nodo_AEliminar.Tag;

                    //Tiene que ser una pregunta
                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.PreguntaRespuestaInicio == "P" &&
                        _lst_idEstructuraPartePeticionDatosPregunta_ABorrar.Contains(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.IdPregunta))
                    {
                        Arbol_Eliminar_Nodo(trn_Nodo_AEliminar);
                    }

                    //Ver si tiene Nodos Hijos
                    if (trn_Nodo_AEliminar.Nodes != null &&
                        trn_Nodo_AEliminar.Nodes.Count > 0)
                    {
                        Arbol_Eliminar_Nodo_Recursivo(trn_Nodo_AEliminar.Nodes, _lst_idEstructuraPartePeticionDatosPregunta_ABorrar);
                    }
                }
            }
        }
        public void Arbol_Eliminar_Nodo(TreeNode _trn_Nodo_AEliminar)
        {
            try
            {
                INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_Nodo_AEliminar.Tag;

                //Tiene que ser una pregunta
                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.PreguntaRespuestaInicio == "P")
                {
                    //Quitar el idPreguntaRelacionada del padre del nodoMovimiento si lo tuviera ..................
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA = null;
                    INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_Nodo_AEliminar.Parent.Tag;
                    //Tiene que ser respuesta o el principal
                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE != null &&
                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE.PreguntaRespuestaInicio == "R")
                    {
                        //Tiene que ser del tipo 'Solo seleccionar una respuesta'
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE.Tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                        {
                            INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE_DELPADRE = (INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo)_trn_Nodo_AEliminar.Parent.Parent.Tag;

                            //Busco la pregunta
                            INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR = Preguntas_Buscar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE_DELPADRE.IdPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE_DELPADRE.IdentificadorUnico);
                            if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR != null &&
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas != null &&
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Count > 0)
                            {
                                //Busco la respuesta
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_ACTULIZAR.Respuestas.Where(m => m.idRespuesta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO_PADRE.IdRespuesta).FirstOrDefault();

                                //Se borra la pregunta relacionada de la respuesta antigua
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA != null)
                                {
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ABORRARPREGUNTARELACIONADA.PreguntaRelacionada = null;
                                }
                            }
                        }
                    }
                    else
                    {
                        //Borrar de la rama principal
                        if (g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo != null && g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Count > 0)
                        {
                            g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.RemoveAll(m => m.idPregunta == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.IdPregunta && m.IdentificadorUnico == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo_MOVIMIENTO.IdentificadorUnico);
                        }
                    }

                    //Lo elimino del arbol
                    _trn_Nodo_AEliminar.Remove();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Arbol_Eliminar_Nodo));
            }
        }
        public void Arbol_Actualizar_Pregunta(INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo, INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo _mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO)
        {
            try
            {
                //Si es la pregunta revisar Respuestas
                if (_mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.idPregunta == _mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO.id)
                {
                    //RESPUESTAS................................
                    //No Tiene Respuestas
                    if (_mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO.tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_ESCRIBIRTEXTO.Codigo)
                    {
                        _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas = null;
                    }
                    //Tiene respuestas
                    else
                    {
                        //Si el antiguo no tiene respuestas
                        if (_mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_ESCRIBIRTEXTO.Codigo)
                        {
                            _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas = new List<INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo>();

                            int int_Orden_LINEA = 0;
                            foreach (MYT_EstructurasPartesPeticionDatos_Repuestas mdl_MYT_EstructurasPartesPeticionDatos_Repuestas in _mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO.MYT_EstructurasPartesPeticionDatos_Repuestas)
                            {
                                //GUID
                                string str_GUID_RESPUESTA = Guid.NewGuid().ToString();

                                INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo = new INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo();
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.idRespuesta = mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.id;
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.orden = int_Orden_LINEA;
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.IdentificadorUnico = str_GUID_RESPUESTA;
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada = null;

                                //Añadir al listado
                                _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.Add(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo);

                                int_Orden_LINEA += 1;
                            }
                        }
                        //Si el antiguo tiene respuestas
                        else
                        {
                            int int_Orden_LINEA = 9000;
                            List<long> lst_idRespuestasFinales = new List<long>();
                            foreach (MYT_EstructurasPartesPeticionDatos_Repuestas mdl_MYT_EstructurasPartesPeticionDatos_Repuestas in _mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO.MYT_EstructurasPartesPeticionDatos_Repuestas)
                            {
                                //Buscar si existe ya en el listado
                                INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo = _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.Where(m => m.idRespuesta == mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.id).FirstOrDefault();

                                //No Existe
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo == null)
                                {
                                    //GUID
                                    string str_GUID_RESPUESTA = Guid.NewGuid().ToString();

                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo = new INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo();
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.idRespuesta = mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.id;
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.orden = int_Orden_LINEA;
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.IdentificadorUnico = str_GUID_RESPUESTA;
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada = null;

                                    //Añadir al listado
                                    _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.Add(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo);

                                    int_Orden_LINEA += 1;
                                }
                                //Si es de Tipo Seleccion una o varias respuestas, quitar las preguntas relaciondas
                                else if (_mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO.tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNAOVARIASRESPUESTA.Codigo)
                                {
                                    mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada = null;
                                }

                                //Añadir al listado final
                                lst_idRespuestasFinales.Add(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.idRespuesta);

                            }

                            //Borrar las Respuestas que sobran
                            _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.RemoveAll(m => !lst_idRespuestasFinales.Contains(m.idRespuesta));

                            //Ordenar Listado de Respuestas
                            int int_Orden_Linea_Final = 0;
                            foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ORDENAR in _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.OrderBy(m => m.orden))
                            {
                                mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo_ORDENAR.orden = int_Orden_Linea_Final;

                                int_Orden_Linea_Final += 1;
                            }
                        }
                    }

                    //tipo......................................
                    _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.tipo = _mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO.tipo;
                }

                //Ver si tiene respuesta y tiene Alguna pregunta relacionada
                if (_mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas != null &&
                    _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.Count > 0)
                {
                    foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo in _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas)
                    {
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada != null)
                        {
                            Arbol_Actualizar_Pregunta(mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada, _mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo_MODIFICADO);
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Arbol_Actualizar_Pregunta));
            }
        }
        public void Arbol_Recargar(TreeNode _trn_Nodo_Padre, INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo)
        {
            try
            {
                //FINALIZADOR
                if (_mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.tipo == -1)
                {
                    //Finalizador
                    TreeNode trn_NodoNuevo_Finalizador = new TreeNode(g_str_Nodo_FINALIZADOR);

                    // Color 
                    trn_NodoNuevo_Finalizador.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_FONDO;
                    trn_NodoNuevo_Finalizador.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_FINALIZADOR_LETRA;

                    //Nombre
                    trn_NodoNuevo_Finalizador.Name = g_lng_idPreguntas_FINALIZADOR.ToString();

                    //Tag
                    trn_NodoNuevo_Finalizador.Tag = new INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo("F", -1, g_lng_idPreguntas_FINALIZADOR, -1, _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.IdentificadorUnico);

                    //Añadir
                    _trn_Nodo_Padre.Nodes.Add(trn_NodoNuevo_Finalizador);

                    //Seleccionar Nodo
                    ex_trv_Preguntas.SelectedNode = _trn_Nodo_Padre;
                    ex_trv_Preguntas.Select();

                    //Expande el nodo
                    _trn_Nodo_Padre.Expand();
                }
                //PREGUNTA
                else
                {
                    //Buscar Pregunta
                    INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo = g_lst_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.Where(m => m.id == _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.idPregunta).FirstOrDefault();

                    //Pregunta
                    TreeNode trn_NodoNuevo_Pregunta = new TreeNode(mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.descripcion);

                    // Seleccionar una respuesta 
                    if (mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNARESPUESTA.Codigo)
                    {
                        trn_NodoNuevo_Pregunta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_FONDO;
                        trn_NodoNuevo_Pregunta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNARESPUESTA_LETRA;
                    }
                    //Seleccionar una o varias respuestas
                    else if (mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo.ToString() == Variables_Mythos.G_MDL_ESTRUCTURAPARTEPETICIONDATOS_PREGUNTA_TIPO_SELECCIONARUNAOVARIASRESPUESTA.Codigo)
                    {
                        trn_NodoNuevo_Pregunta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_FONDO;
                        trn_NodoNuevo_Pregunta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_SELECCIONARUNAOVARIASRESPUESTAS_LETRA;
                    }
                    //Escribir Texto
                    else
                    {
                        trn_NodoNuevo_Pregunta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_FONDO;
                        trn_NodoNuevo_Pregunta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_PREGUNTAS_ESCRIBIRTEXTO_LETRA;
                    }

                    //Nombre
                    trn_NodoNuevo_Pregunta.Name = mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id.ToString();

                    //Tag
                    trn_NodoNuevo_Pregunta.Tag = new INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo("P", mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo, mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.id, -1, _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.IdentificadorUnico);

                    //Añadir
                    _trn_Nodo_Padre.Nodes.Add(trn_NodoNuevo_Pregunta);

                    //Respuestas ....................................................
                    if (_mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas != null &&
                        _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.Count > 0)
                    {
                        TreeNode trn_NodoNuevo_Respuesta = null;
                        MYT_EstructurasPartesPeticionDatos_Repuestas mdl_MYT_EstructurasPartesPeticionDatos_Repuestas = null;

                        foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo in _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Respuestas.OrderBy(m => m.orden))
                        {
                            //Buscar Respuesta
                            mdl_MYT_EstructurasPartesPeticionDatos_Repuestas = mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.MYT_EstructurasPartesPeticionDatos_Repuestas.Where(m => m.id == mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.idRespuesta).FirstOrDefault();

                            if (mdl_MYT_EstructurasPartesPeticionDatos_Repuestas != null)
                            {
                                //Respuesta
                                trn_NodoNuevo_Respuesta = new TreeNode(mdl_MYT_EstructurasPartesPeticionDatos_Repuestas.texto);

                                // Color 
                                trn_NodoNuevo_Respuesta.BackColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_RESPUESTAS_FONDO;
                                trn_NodoNuevo_Respuesta.ForeColor = Colores.G_COLOR_ESTRUCTURAPETICIONDATOS_RESPUESTAS_LETRA;

                                //Nombre
                                trn_NodoNuevo_Respuesta.Name = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.idRespuesta.ToString();

                                //Tag
                                trn_NodoNuevo_Respuesta.Tag = new INTERNO_Arbol_EstructuraPartePeticionDatos_Nodo_Modelo("R", mdl_INTERNO_MYT_EstructurasPartesPeticionDatos_Preguntas_Listado_Modelo.tipo, _mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.idPregunta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.idRespuesta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.IdentificadorUnico);

                                //Añadir
                                trn_NodoNuevo_Pregunta.Nodes.Add(trn_NodoNuevo_Respuesta);


                                //Si tiene pregunta por debajo llamo recursivamente a esta funcion
                                if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada != null)
                                {
                                    Arbol_Recargar(trn_NodoNuevo_Respuesta, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada);
                                }

                            }
                        }
                    }

                    //Seleccionar Nodo
                    ex_trv_Preguntas.SelectedNode = trn_NodoNuevo_Pregunta;
                    ex_trv_Preguntas.Select();

                    //Expande el nodo
                    trn_NodoNuevo_Pregunta.Expand();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_EstructuraPartesPeticionDatos) + "/" + nameof(Arbol_Recargar));
            }
        }

        #region Buscar Pregunta
        public INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo Preguntas_Buscar_Pregunta(long _lng_idEstructuraPartePeticionDatosPregunta, string _str_IdentificadorUnico)
        {
            INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = null;

            //recorrer las preguntas
            if (g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo != null && g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo.Count > 0)
            {
                foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_BUSCAR in g_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo)
                {
                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_BUSCAR.idPregunta == _lng_idEstructuraPartePeticionDatosPregunta &&
                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_BUSCAR.IdentificadorUnico == _str_IdentificadorUnico)
                    {
                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_BUSCAR;
                    }
                    else
                    {
                        //recorrer las respuestas , para ver si tiene la pregunta relacionada
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_BUSCAR.Respuestas != null &&
                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_BUSCAR.Respuestas.Count > 0)
                        {
                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = Preguntas_Buscar_Pregunta_EnRespuestas(_lng_idEstructuraPartePeticionDatosPregunta, _str_IdentificadorUnico, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo_BUSCAR.Respuestas);
                        }
                    }


                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo != null)
                    {
                        break;
                    }
                }
            }

            return mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo;
        }
        public INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo Preguntas_Buscar_Pregunta_EnRespuestas(long _lng_idEstructuraPartePeticionDatosPregunta, string _str_IdentificadorUnico, List<INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo> _lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo)
        {
            INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = null;

            //recorrer las preguntas
            if (_lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo != null && _lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.Count > 0)
            {
                foreach (INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo in _lst_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo)
                {
                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada != null &&
                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada.idPregunta == _lng_idEstructuraPartePeticionDatosPregunta &&
                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada.IdentificadorUnico == _str_IdentificadorUnico)
                    {
                        mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada;
                    }
                    else
                    {
                        //recorrer las respuestas , para ver si tiene la pregunta relacionada
                        if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada != null &&
                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada.Respuestas != null &&
                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada.Respuestas.Count > 0)
                        {
                            mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo = Preguntas_Buscar_Pregunta_EnRespuestas(_lng_idEstructuraPartePeticionDatosPregunta, _str_IdentificadorUnico, mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Respuestas_Modelo.PreguntaRelacionada.Respuestas);
                        }
                    }


                    if (mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo != null)
                    {
                        break;
                    }
                }
            }

            return mdl_INTERNO_Arbol_EstructuraPartePeticionDatos_Preguntas_Modelo;
        }

        #endregion

        #region Bloquear/Desbloquear
        public void Preguntas_BloquearDesbloquear(bool _bol_Bloquear)
        {
            //Arbol
            ex_trv_Preguntas.Enabled = !_bol_Bloquear;
            ex_btn_EliminarPregunta.Enabled = !_bol_Bloquear;
            ex_btn_PrimeroNodo.Enabled = !_bol_Bloquear;
            ex_btn_SubirNodo.Enabled = !_bol_Bloquear;
            ex_btn_BajarNodo.Enabled = !_bol_Bloquear;
            ex_btn_UltimoNodo.Enabled = !_bol_Bloquear;

            //DataGridView
            pnl_PreguntasListado.Enabled = !_bol_Bloquear;

            //Control_preguntas
            SoloLectura.Empezar(ctu_P_EstructuraPartesPeticionDatos_EstructuraPreguntas, !_bol_Bloquear);



        }

        #endregion

    }
}
