Exferia/Exferia_Controles/Exferia_Controles/Exferia_RichTextBox.cs

654 lines
22 KiB
C#

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.General;
using Exferia_Aplicacion.Visualizacion;
namespace Exferia_Controles
{
public partial class Exferia_RichTextBox : Panel
{
private RichTextBox_Principal g_obj_RichTextBox_Principal;
#region Propiedades Publicas
public void Prueba()
{ }
public HorizontalAlignment Exferia_RichTextBox_Aligment
{
set
{
g_obj_RichTextBox_Principal.SelectionAlignment = value;
}
get
{
return g_obj_RichTextBox_Principal.SelectionAlignment;
}
}
public void Exferia_RichTextBox_Copiar()
{
g_obj_RichTextBox_Principal.Copy();
}
public void Exferia_RichTextBox_Cortar()
{
g_obj_RichTextBox_Principal.Cut();
}
public void Exferia_RichTextBox_Pegar(DataFormats.Format _valor)
{
g_obj_RichTextBox_Principal.Paste(_valor);
}
internal bool g_bol_Obligatorio = false;
public bool Exferia_RichTextBox_Obligatorio
{
set
{
g_bol_Obligatorio = value;
if (g_bol_Obligatorio)
{
Exferia_RichTextBox_Fondo = Colores.G_COLOR_FONDO_OBLIGATORIO;
}
else
{
Exferia_RichTextBox_Fondo = Colores.G_COLOR_FONDO_BASE;
}
}
get
{
return g_bol_Obligatorio;
}
}
public Color Exferia_RichTextBox_Fondo
{
set
{
g_obj_RichTextBox_Principal.BackColor = value;
}
get
{
return g_obj_RichTextBox_Principal.BackColor;
}
}
public void Exferia_RichTextBox_ColorTexto(Color _clr_ColorTexto)
{
g_obj_RichTextBox_Principal.ForeColor = _clr_ColorTexto;
}
public void Exferia_RichTextBox_FuenteTexto(Font _fnt_Texto)
{
g_obj_RichTextBox_Principal.Font = _fnt_Texto;
}
public Color g_clr_BordeColorNormal = Color.Black;
public Color Exferia_RichTextBox_BordeColor_Normal
{
get { return g_clr_BordeColorNormal; }
set { g_clr_BordeColorNormal = value; }
}
public Color g_clr_BordeColorFoco = Color.Red;
public Color Exferia_RichTextBox_BordeColor_Foco
{
get { return g_clr_BordeColorFoco; }
set { g_clr_BordeColorFoco = value; }
}
public int Exferia_RichTextBox_MaxLength
{
get { return g_obj_RichTextBox_Principal.RTXT_MaxLength; }
set { g_obj_RichTextBox_Principal.RTXT_MaxLength = value; }
}
public string Exferia_RichTextBox_SelectedText
{
get { return g_obj_RichTextBox_Principal.RTXT_SelectedText; }
set { g_obj_RichTextBox_Principal.RTXT_SelectedText = value; }
}
public int Exferia_RichTextBox_SelectionStart
{
set
{
g_obj_RichTextBox_Principal.RTXT_SelectionStart = value;
}
get
{
return g_obj_RichTextBox_Principal.RTXT_SelectionStart;
}
}
public int Exferia_RichTextBox_SelectionLength
{
set
{
g_obj_RichTextBox_Principal.RTXT_SelectionLength = value;
}
get
{
return g_obj_RichTextBox_Principal.RTXT_SelectionLength;
}
}
public Font Exferia_RichTextBox_SelectionFont
{
set
{
g_obj_RichTextBox_Principal.SelectionFont = value;
}
get
{
return g_obj_RichTextBox_Principal.SelectionFont;
}
}
public int Exferia_RichTextBox_SelectionIndent
{
set
{
g_obj_RichTextBox_Principal.SelectionIndent = value;
}
get
{
return g_obj_RichTextBox_Principal.SelectionIndent;
}
}
public bool Exferia_RichTextBox_SelectionBullet
{
set
{
g_obj_RichTextBox_Principal.SelectionBullet = value;
}
get
{
return g_obj_RichTextBox_Principal.SelectionBullet;
}
}
public Color Exferia_RichTextBox_SelectionColor
{
set
{
g_obj_RichTextBox_Principal.SelectionColor = value;
}
get
{
return g_obj_RichTextBox_Principal.SelectionColor;
}
}
public Color Exferia_RichTextBox_SelectionBackColor
{
set
{
g_obj_RichTextBox_Principal.SelectionBackColor = value;
}
get
{
return g_obj_RichTextBox_Principal.SelectionBackColor;
}
}
public string[] Exferia_RichTextBox_Lines
{
set
{
g_obj_RichTextBox_Principal.Lines = value;
}
get
{
return g_obj_RichTextBox_Principal.Lines;
}
}
public int Exferia_RichTextBox_GetFirstCharIndexOfCurrentLine
{
get
{
return g_obj_RichTextBox_Principal.GetFirstCharIndexOfCurrentLine();
}
}
public int Exferia_RichTextBox_GetLineFromCharIndex(int int_indice)
{
return g_obj_RichTextBox_Principal.GetLineFromCharIndex(int_indice);
}
public void Exferia_RichTexBox_Select(int int_start, int int_Tamanio)
{
g_obj_RichTextBox_Principal.Select(int_start, int_Tamanio);
}
public int Exferia_RichTexBox_CharOffset
{
set
{
g_obj_RichTextBox_Principal.SelectionCharOffset = value;
}
get
{
return g_obj_RichTextBox_Principal.SelectionCharOffset;
}
}
public bool Exferia_RichTextBox_Multiline
{
get { return g_obj_RichTextBox_Principal.RTXT_Multiline; }
set { g_obj_RichTextBox_Principal.RTXT_Multiline = value; }
}
public override string Text
{
get { return g_obj_RichTextBox_Principal.RTXT_Text; }
set { g_obj_RichTextBox_Principal.RTXT_Text = value; }
}
public string Exferia_RichTextBox_RTF
{
get { return g_obj_RichTextBox_Principal.Rtf; }
set { g_obj_RichTextBox_Principal.Rtf = value; }
}
public string Exferia_RichTextBox_Texto_Inicial
{
get { return g_obj_RichTextBox_Principal.RTXT_Texto_Inicial; }
set { g_obj_RichTextBox_Principal.RTXT_Texto_Inicial = value; }
}
public bool Exferia_RichTextBox_TabStop_Txt
{
get { return g_obj_RichTextBox_Principal.RTXT_TabStop; }
set { g_obj_RichTextBox_Principal.RTXT_TabStop = value; }
}
public bool Exferia_RichTextBox_NoBloquear
{
get { return g_obj_RichTextBox_Principal.RTXT_NoBloquear; }
set
{
Focus();
g_obj_RichTextBox_Principal.RTXT_NoBloquear = value;
}
}
public void Exferia_RichTextBox_Foco()
{
g_obj_RichTextBox_Principal.RTXT_Foco();
Invalidate();
}
public RichTextBoxScrollBars Exferia_RichTextBox_ScrollBars
{
get { return g_obj_RichTextBox_Principal.RTXT_ScrollBars; }
set { g_obj_RichTextBox_Principal.RTXT_ScrollBars = value; }
}
public bool Exferia_RichTextBox_ReadOnly
{
get { return g_obj_RichTextBox_Principal.TXT_ReadOnly; }
set { g_obj_RichTextBox_Principal.TXT_ReadOnly = value; }
}
public void Exferia_RichTextBox_AutoCompletar_Mayor(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo)
{
g_obj_RichTextBox_Principal.TXT_AutoCompletar_Mayor = _mdl_INTERNO_ValoresGenerales_Modelo;
}
public bool Exferia_RichTextBox_TieneFoco
{
get { return g_obj_RichTextBox_Principal.g_bol_TieneFoco; }
}
//Se utiliza para copiar lo mismo del textbox actual a otro texto box cuando pieda el foco
internal Exferia_TextBox g_ex_txt_paraCopiado = null;
public Exferia_TextBox Exferia_TextBox_Objeto_CopiarInformacion
{
set
{
g_ex_txt_paraCopiado = value;
}
}
#endregion
public Exferia_RichTextBox()
{
DoubleBuffered = true;
Padding = new Padding(2);
Anchor = AnchorStyles.Top | AnchorStyles.Left;
Height = 22;
g_obj_RichTextBox_Principal = new RichTextBox_Principal();
g_obj_RichTextBox_Principal.RichTextBox_Inicial_Refresh += new EventHandler(RichTextBox_Principal_Refresh);
g_obj_RichTextBox_Principal.RichTextBox_Inicial_KeyPress += new KeyPressEventHandler(RichTextBox_Principal_KeyPress);
g_obj_RichTextBox_Principal.RichTextBox_Inicial_KeyDown += new KeyEventHandler(RichTextBox_Principal_KeyDown);
g_obj_RichTextBox_Principal.RichTextBox_Inicial_KeyUp += new KeyEventHandler(RichTextBox_Principal_KeyUp);
g_obj_RichTextBox_Principal.RichTextBox_Inicial_TextChanged += new EventHandler(RichTextBox_Principal_TextChanged);
g_obj_RichTextBox_Principal.RichTextBox_Inicial_GotFocus += new EventHandler(RichTextBox_Principal_GotFocus);
g_obj_RichTextBox_Principal.RichTextBox_Inicial_LostFocus += new EventHandler(RichTextBox_Principal_LostFocus);
Controls.Add(g_obj_RichTextBox_Principal);
}
#region Eventos Publicos
private void RichTextBox_Principal_Refresh(object sender, EventArgs e)
{
Invalidate();
}
public void Exferia_RichTextBox_Paste()
{
g_obj_RichTextBox_Principal.Paste();
}
public event KeyPressEventHandler Exferia_RichTextBox_Evento_KeyPress;
private void RichTextBox_Principal_KeyPress(object sender, KeyPressEventArgs e)
{
//Para que salte el evento en el otro lado
Exferia_RichTextBox_Evento_KeyPress?.Invoke(this, e);
}
public event KeyEventHandler Exferia_RichTextBox_Evento_KeyDown;
private void RichTextBox_Principal_KeyDown(object sender, KeyEventArgs e)
{
if (!g_obj_RichTextBox_Principal.TXT_ReadOnly)
{
//Para que salte el evento en el otro lado
Exferia_RichTextBox_Evento_KeyDown?.Invoke(this, e);
}
}
public event KeyEventHandler Exferia_RichTextBox_Evento_KeyUp;
private void RichTextBox_Principal_KeyUp(object sender, KeyEventArgs e)
{
//Para que salte el evento en el otro lado
Exferia_RichTextBox_Evento_KeyUp?.Invoke(this, e);
}
public event EventHandler Exferia_RichTextBox_Evento_TextChanged;
private void RichTextBox_Principal_TextChanged(object sender, EventArgs e)
{
//Para que salte el evento en el otro lado
Exferia_RichTextBox_Evento_TextChanged?.Invoke(this, e);
}
public event EventHandler Exferia_RichTextBox_Evento_GotFocus;
private void RichTextBox_Principal_GotFocus(object sender, EventArgs e)
{
//Para que salte el evento en el otro lado
Exferia_RichTextBox_Evento_GotFocus?.Invoke(this, e);
}
public event EventHandler Exferia_RichTextBox_Evento_LostFocus;
private void RichTextBox_Principal_LostFocus(object sender, EventArgs e)
{
if (g_ex_txt_paraCopiado != null)
{
if (g_ex_txt_paraCopiado.Text.Trim().Length == 0)
{
g_ex_txt_paraCopiado.Text = g_obj_RichTextBox_Principal.RTXT_Text;
}
}
//Para que salte el evento en el otro lado
Exferia_RichTextBox_Evento_LostFocus?.Invoke(this, e);
}
#endregion
#region Eventos Privados
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(SystemColors.Window);
using (Pen borderPen = new Pen(g_obj_RichTextBox_Principal.Focused ? g_clr_BordeColorFoco : g_clr_BordeColorNormal))
{
e.Graphics.DrawRectangle(borderPen, new Rectangle(0, 0, ClientSize.Width - 1, ClientSize.Height - 1));
}
base.OnPaint(e);
}
#endregion
internal class RichTextBox_Principal : RichTextBox
{
public event KeyPressEventHandler RichTextBox_Inicial_KeyPress;
public event KeyEventHandler RichTextBox_Inicial_KeyDown;
public event KeyEventHandler RichTextBox_Inicial_KeyUp;
public event EventHandler RichTextBox_Inicial_TextChanged;
public event EventHandler RichTextBox_Inicial_GotFocus;
public event EventHandler RichTextBox_Inicial_LostFocus;
public event EventHandler RichTextBox_Inicial_Refresh;
public bool g_bol_TieneFoco = false;
#region Propiedades
INTERNO_ValoresGenerales_Modelo g_mdl_INTERNO_ValoresGenerales_Modelo = null;
public INTERNO_ValoresGenerales_Modelo TXT_AutoCompletar_Mayor
{
set
{
g_mdl_INTERNO_ValoresGenerales_Modelo = value;
if (g_mdl_INTERNO_ValoresGenerales_Modelo != null && g_mdl_INTERNO_ValoresGenerales_Modelo.Control_Contabilidad != null && g_mdl_INTERNO_ValoresGenerales_Modelo.Control_Contabilidad.numeroDigitosContabilidad > 4)
{
MaxLength = g_mdl_INTERNO_ValoresGenerales_Modelo.Control_Contabilidad.numeroDigitosContabilidad;
}
}
}
public int RTXT_MaxLength
{
get { return MaxLength; }
set { MaxLength = value; }
}
public string RTXT_SelectedText
{
get { return SelectedText; }
set { SelectedText = value; }
}
public int RTXT_SelectionStart
{
set { SelectionStart = value; }
get { return SelectionStart; }
}
public int RTXT_SelectionLength
{
set { SelectionLength = value; }
get { return SelectionLength; }
}
public bool RTXT_Multiline
{
get { return Multiline; }
set { Multiline = value; }
}
public string RTXT_Text
{
get { return Text; }
set { Text = value; }
}
public string RTXT_Texto_Inicial
{
get { return Text; }
set { Text = value; }
}
public bool RTXT_TabStop
{
get { return TabStop; }
set { TabStop = value; }
}
public bool RTXT_NoBloquear
{
get { return Enabled; }
set
{
Focus();
Enabled = value;
}
}
public void RTXT_Foco()
{
Focus();
Invalidate();
}
public RichTextBoxScrollBars RTXT_ScrollBars
{
get { return ScrollBars; }
set { ScrollBars = value; }
}
public bool TXT_ReadOnly
{
get { return ReadOnly; }
set { ReadOnly = value; }
}
#endregion
public RichTextBox_Principal()
{
AutoSize = false;
BorderStyle = BorderStyle.None;
Dock = DockStyle.Fill;
Enter += new EventHandler(rtxt_Refresh);
Leave += new EventHandler(rtxt_Refresh);
Resize += new EventHandler(rtxt_Refresh);
EnabledChanged += new EventHandler(rtxt_Refresh);
KeyPress += new KeyPressEventHandler(rtxt_KeyPress);
KeyDown += new KeyEventHandler(rtxt_KeyDown);
KeyUp += new KeyEventHandler(rtxt_KeyUp);
TextChanged += new EventHandler(rtxt_TextChanged);
GotFocus += new EventHandler(rtxt_GotFocus);
LostFocus += new EventHandler(rtxt_LostFocus);
}
#region Eventos
private void rtxt_Refresh(object sender, EventArgs e)
{
RichTextBox_Inicial_Refresh?.Invoke(this, e);
}
private void rtxt_KeyPress(object sender, KeyPressEventArgs e)
{
//Para que salte el evento en el otro lado
RichTextBox_Inicial_KeyPress?.Invoke(this, e);
}
private void rtxt_KeyDown(object sender, KeyEventArgs e)
{
//Para que salte el evento en el otro lado
RichTextBox_Inicial_KeyDown?.Invoke(this, e);
}
private void rtxt_KeyUp(object sender, KeyEventArgs e)
{
//Para que salte el evento en el otro lado
RichTextBox_Inicial_KeyUp?.Invoke(this, e);
}
private void rtxt_TextChanged(object sender, EventArgs e)
{
//Para que salte el evento en el otro lado
RichTextBox_Inicial_TextChanged?.Invoke(this, e);
}
private void rtxt_GotFocus(object sender, EventArgs e)
{
g_bol_TieneFoco = true;
if (!string.IsNullOrEmpty(Text))
{
SelectionStart = 0;
SelectionLength = Text.Length;
}
//Para que salte el evento en el otro lado
RichTextBox_Inicial_GotFocus?.Invoke(this, e);
}
private void rtxt_LostFocus(object sender, EventArgs e)
{
g_bol_TieneFoco = false;
string str_Texto = Text;
try
{
if (g_mdl_INTERNO_ValoresGenerales_Modelo != null)
{
//Numero de digitos de contabilidad
int int_NumeroDigitosContabilidad = 4;
if (g_mdl_INTERNO_ValoresGenerales_Modelo.Control_Contabilidad != null && g_mdl_INTERNO_ValoresGenerales_Modelo.Control_Contabilidad.numeroDigitosContabilidad > 4)
{
int_NumeroDigitosContabilidad = g_mdl_INTERNO_ValoresGenerales_Modelo.Control_Contabilidad.numeroDigitosContabilidad;
}
if (str_Texto.Trim().Length > 0)
{
str_Texto = str_Texto.Trim();
int int_PosicionPunto = str_Texto.IndexOf('.');
if (int_PosicionPunto > -1)
{
//Buscar digitos antes del punto
string str_TextoAntesPunto = str_Texto.Substring(0, int_PosicionPunto);
//Buscar digitos despues del punto
string str_TextoDespuesPunto = "";
if (int_PosicionPunto > -1 && int_PosicionPunto != (str_Texto.Length - 1))
{
str_TextoDespuesPunto = str_Texto.Substring(int_PosicionPunto + 1, str_Texto.Length - (int_PosicionPunto + 1));
}
int int_TotalCaracteres = str_TextoAntesPunto.Length + str_TextoDespuesPunto.Length;
//Ceros intermedios
if (int_NumeroDigitosContabilidad > int_TotalCaracteres)
{
int int_CantidadCeros = int_NumeroDigitosContabilidad - int_TotalCaracteres;
Text = str_TextoAntesPunto + "".PadRight(int_CantidadCeros, '0') + str_TextoDespuesPunto;
}
else
{
Text = str_TextoAntesPunto + str_TextoDespuesPunto;
}
}
}
}
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Exferia_TextBox) + "/" + nameof(rtxt_LostFocus));
}
//Para que salte el evento en el otro lado
RichTextBox_Inicial_LostFocus?.Invoke(this, e);
}
#endregion
}
}
}