using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EditorMDI
{
public partial class FormDocumento : Form
{
private string[] línea;
private int totalLineasImpresas;
public FormDocumento()
{
InitializeComponent();
}
private void ArchivoGuardar_Click(object sender, EventArgs e)
{
// Formulario padre
FormMDI formPadre = (FormMDI)this.MdiParent;
// Formulario hijo activo
FormDocumento FormHijo = this;
if (FormHijo == null) return;
// Si el texto cambió...
if (FormHijo.rtbText.Modified)
{
// Obtener la ruta actual del fichero
string ruta = formPadre.etbarestPpal.Text;
// Obtener el formato actual del fichero
RichTextBoxStreamType formato = RichTextBoxStreamType.PlainText;
if (ruta.EndsWith("rtf"))
formato = RichTextBoxStreamType.RichText;
if (FormHijo.Text.StartsWith("Documento"))
{
// Mostrar el diálogo Guardar
SaveFileDialog DlgGuardar = new SaveFileDialog();
DlgGuardar.Filter =
"ficheros txt (*.txt)|*.txt|ficheros rtf (*.rtf)|*.rtf";
if (DlgGuardar.ShowDialog() == DialogResult.OK)
{
// Obtener el nombre del fichero
ruta = DlgGuardar.FileName;
// Obtener el formato del fichero
if (DlgGuardar.FilterIndex == 1)
formato = RichTextBoxStreamType.PlainText;
else if (DlgGuardar.FilterIndex == 2)
formato = RichTextBoxStreamType.RichText;
}
}
// Guardar el fichero
FormHijo.rtbText.SaveFile(ruta, formato);
// Mostrar el nombre del fichero en la barra de título
FormHijo.Text = ruta.Substring(ruta.LastIndexOf("\\") + 1);
// Mostrar la ruta del fichero en la barra de estado
formPadre.etbarestPpal.Text = ruta;
// Fichero no modificado
FormHijo.rtbText.Modified = false;
}
}
private void ArchivoGuardarcomo_Click(object sender, EventArgs e)
{
// Formulario padre
FormMDI formPadre = (FormMDI)this.MdiParent;
// Formulario hijo activo
FormDocumento FormHijo = this;
if (FormHijo == null) return;
// Mostrar el diálogo Guardar
SaveFileDialog DlgGuardar = new SaveFileDialog();
DlgGuardar.Filter =
"ficheros txt (*.txt)|*.txt|ficheros rtf (*.rtf)|*.rtf";
if (DlgGuardar.ShowDialog() == DialogResult.OK)
{
// Obtener el nombre del fichero
string ruta = DlgGuardar.FileName;
// Obtener el formato del fichero
RichTextBoxStreamType formato = RichTextBoxStreamType.PlainText;
if (DlgGuardar.FilterIndex == 2)
formato = RichTextBoxStreamType.RichText;
// Guardar el fichero
FormHijo.rtbText.SaveFile(ruta, formato);
// Mostrar el nombre del fichero en la barra de título
FormHijo.Text = ruta.Substring(ruta.LastIndexOf("\\") + 1);
// Mostrar la ruta del fichero en la barra de estado
formPadre.etbarestPpal.Text = ruta;
// Fichero no modificado
FormHijo.rtbText.Modified = false;
}
}
private void ArchivoImprimir_Click(object sender, EventArgs e)
{
// Formulario padre
FormMDI formPadre = (FormMDI)this.MdiParent;
// Formulario hijo activo
FormDocumento FormHijo = this;
if (FormHijo == null) return;
// Se supone que durante el diseño se asignó a la propiedad Document
// de PrintDialog1 el objeto PrintDocument utilizado para imprimir.
// Permitir al usuario elegir el rango de páginas a imprimir.
PrintDialog1.AllowSomePages = true;
if (PrintDialog1.ShowDialog() == DialogResult.OK)
{
// Si se pulsó el botón "Aceptar" (OK), entonces imprimir.
string texto = FormHijo.rtbText.Text;
char[] seps = { '\n', '\r' }; // LF y CR
línea = texto.Split(seps); //líneas de texto que hay que imprimir
totalLineasImpresas = 0;
PrintDocument1.Print(); //invoca a ImprimirDoc_PrintPage
}
}
private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
// Formulario padre
FormMDI formPadre = (FormMDI)this.MdiParent;
// Formulario hijo activo
FormDocumento FormHijo = this;
// Insertar aquí el código para procesar la página.
float lineasPorPag;
float pos_Y;
float margenIzq = e.MarginBounds.Left;
float margenSup = e.MarginBounds.Top;
// Calcular el número de líneas por página
Font fuente = FormHijo.rtbText.Font;
float altoFuente = fuente.GetHeight(e.Graphics);
lineasPorPag = e.MarginBounds.Height / altoFuente;
// Contador de las líneas impresas en una página
int lineasImpresasPorPag = 0;
// Imprimir cada una de las líneas
while (totalLineasImpresas < línea.Length && lineasImpresasPorPag < lineasPorPag)
{
pos_Y = margenSup + (lineasImpresasPorPag * altoFuente);
e.Graphics.DrawString(línea[totalLineasImpresas], fuente, Brushes.Black, margenIzq, pos_Y, new StringFormat());
lineasImpresasPorPag += 1;
totalLineasImpresas += 1;
}
// Si quedan líneas por imprimir, siguiente página
if (totalLineasImpresas < línea.Length)
e.HasMorePages = true; // se invoca de nuevo a ImprimirDoc_PrintPage
else
e.HasMorePages = false; // finaliza la impresión
}
private void EdicionCortar_Click(object sender, EventArgs e)
{
FormDocumento FormHijo = this;
// Verificar si hay texto seleccionado
if (FormHijo.rtbText.SelectedText != "")
{
// Cortar el texto seleccionado y ponerlo en la papelera
FormHijo.rtbText.Cut();
}
}
private void EdicionCopiar_Click(object sender, EventArgs e)
{
FormDocumento FormHijo = this;
// Verificar si hay texto seleccionado
if (FormHijo.rtbText.SelectedText != "")
{
// Copiar el texto seleccionado y ponerlo en la papelera
FormHijo.rtbText.Copy();
}
}
private void EdicionPegar_Click(object sender, EventArgs e)
{
FormDocumento FormHijo = this;
// Verificar si hay texto en la papelera para pegar
if ((Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)) == true)
{
// Verificar si hay texto seleccionado
if (FormHijo.rtbText.SelectionLength > 0)
{
// Preguntar al usuario si quiere sobreescribir el texto seleccionado
if (MessageBox.Show("¿Quiere sobreescribir la selección?", "Pegar", MessageBoxButtons.YesNo) == DialogResult.No)
{
// Mover el punto de inserción después de la selección y pegar
FormHijo.rtbText.SelectionStart = FormHijo.rtbText.SelectionStart + FormHijo.rtbText.SelectionLength;
}
}
// Pegar el contenido de la papelera
FormHijo.rtbText.Paste();
}
}
private void EdicionDeshacer_Click(object sender, EventArgs e)
{
FormDocumento FormHijo = this;
// Verificar si la última operación puede deshacerse
if (FormHijo.rtbText.CanUndo == true)
{
// Deshacer la última operación
FormHijo.rtbText.Undo();
}
}
private void EdicionRehacer_Click(object sender, EventArgs e)
{
FormDocumento FormHijo = this;
// Verificar si la última operación puede rehacerse
if (FormHijo.rtbText.CanRedo == true)
{
// Rehacer la última operación
FormHijo.rtbText.Redo();
}
}
private void rtbText_SelectionChanged(object sender, EventArgs e)
{
// Checked = true --> botón pulsado.
// Checked = false --> botón no pulsado.
// Negrita, cursiva, subrayado
btbarNegrita.Checked = rtbText.SelectionFont.Bold;
btbarCursiva.Checked = rtbText.SelectionFont.Italic;
btbarSubrayado.Checked = rtbText.SelectionFont.Underline;
// Alineación del texto
if (rtbText.SelectionAlignment == HorizontalAlignment.Left)
btbarAlinIzda.Checked = true;
else
btbarAlinIzda.Checked = false;
if (rtbText.SelectionAlignment == HorizontalAlignment.Center)
btbarAlinCentrada.Checked = true;
else
btbarAlinCentrada.Checked = false;
if (rtbText.SelectionAlignment == HorizontalAlignment.Right)
btbarAlinDcha.Checked = true;
else
btbarAlinDcha.Checked = false;
}
private void btbarNegrita_Click(object sender, EventArgs e)
{
// Si la selección está en negrita la ponemos en normal y viceversa
Font fuente = rtbText.SelectionFont; // fuente actual
if (fuente.Bold)
fuente = new Font(fuente.FontFamily, fuente.Size, FontStyle.Regular);
else
fuente = new Font(fuente.FontFamily, fuente.Size, FontStyle.Bold);
// Asignar la fuente con el nuevo estilo
rtbText.SelectionFont = fuente;
// Asignar true (botón pulsado) o false (botón no pulsado)
btbarNegrita.Checked = fuente.Bold;
}
private void btbarCursiva_Click(object sender, EventArgs e)
{
// Si la selección está en cursiva la ponemos en normal y viceversa
Font fuente = rtbText.SelectionFont;
if (fuente.Italic)
fuente = new Font(fuente.FontFamily, fuente.Size, FontStyle.Regular);
else
fuente = new Font(fuente.FontFamily, fuente.Size, FontStyle.Italic);
rtbText.SelectionFont = fuente;
btbarCursiva.Checked = fuente.Italic;
}
private void btbarSubrayado_Click(object sender, EventArgs e)
{
// Si la selección está subrayada la ponemos sin subrayar y viceversa
Font fuente = rtbText.SelectionFont;
if (fuente.Underline)
{
fuente = new Font(fuente.FontFamily, fuente.Size, FontStyle.Regular);
}
else
{
fuente = new Font(fuente.FontFamily, fuente.Size, FontStyle.Underline);
}
rtbText.SelectionFont = fuente;
btbarSubrayado.Checked = fuente.Underline;
}
private void btbarAlinIzda_Click(object sender, EventArgs e)
{
rtbText.SelectionAlignment = HorizontalAlignment.Left;
btbarAlinIzda.Checked = true;
btbarAlinCentrada.Checked = false;
btbarAlinDcha.Checked = false;
}
private void btbarAlinCentrada_Click(object sender, EventArgs e)
{
rtbText.SelectionAlignment = HorizontalAlignment.Center;
btbarAlinIzda.Checked = false;
btbarAlinCentrada.Checked = true;
btbarAlinDcha.Checked = false;
}
private void btbarAlinDcha_Click(object sender, EventArgs e)
{
rtbText.SelectionAlignment = HorizontalAlignment.Right;
btbarAlinIzda.Checked = false;
btbarAlinCentrada.Checked = false;
btbarAlinDcha.Checked = true;
}
private void FormDocumento_FormClosing(object sender, FormClosingEventArgs e)
{
// Formulario hijo activo
FormDocumento FormHijo = this;
if (FormHijo == null) return;
// Si el texto cambió...
if (FormHijo.rtbText.Modified)
{
//Preguntar al usuario si quiere guardar el documento
DialogResult respuesta;
respuesta = MessageBox.Show("¿Desea guardar los cambios efectuados en " +
this.Text + "?", "Editor MDI", MessageBoxButtons.YesNoCancel);
if (respuesta == DialogResult.Yes)
btbarGuardar.PerformClick();
else if (respuesta == DialogResult.No)
e.Cancel = false;
else // cancelar
e.Cancel = true; // evento cancelado
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EditorMDI
{
public partial class FormMDI : Form
{
public FormMDI()
{
InitializeComponent();
}
private void AyudaAcercaDe_Click(object sender, EventArgs e)
{
MessageBox.Show("(c) Enrique Murciano v.1.0\r\n" + " 04-2015", "Version 1.0");
}
private void ArchivoSalir_Click(object sender, EventArgs e)
{
Close();
}
private void ArchivoNuevo_Click(object sender, EventArgs e)
{
FormDocumento NuevoFormHijo;
// Crear un nuevo formulario hijo
NuevoFormHijo = new FormDocumento();
// Título del formulario hijo
NuevoFormHijo.Text = "Documento " + MdiChildren.Length.ToString();
// Establecer el formulario padre del hijo
NuevoFormHijo.MdiParent = this;
// Mostrar el formulario hijo
NuevoFormHijo.Show();
}
private void ArchivoAbrir_Click(object sender, EventArgs e)
{
// Formulario hijo activo
FormDocumento FormHijo = (FormDocumento)ActiveMdiChild;
// Si no hay ningún formulario hijo creado, crear uno
// ejecutando el método ArchivoNuevo_Click
if (FormHijo == null)
{
ArchivoNuevo.PerformClick();
FormHijo = (FormDocumento)ActiveMdiChild;
}
// Mostrar el diálogo Abrir
OpenFileDialog DlgAbrir = new OpenFileDialog();
DlgAbrir.Filter = "ficheros txt (*.txt)|*.txt|ficheros rtf (*.rtf)|*.rtf";
if (DlgAbrir.ShowDialog() == DialogResult.OK)
{
// Obtener el nombre del fichero
string ruta = DlgAbrir.FileName;
// Obtener el formato del fichero
RichTextBoxStreamType formato = RichTextBoxStreamType.PlainText;
if (DlgAbrir.FilterIndex == 2)
formato = RichTextBoxStreamType.RichText;
// Cargar el fichero
FormHijo.rtbText.LoadFile(ruta, formato);
// Mostrar el nombre del fichero en la barra de título
FormHijo.Text = ruta.Substring(ruta.LastIndexOf("\\") + 1);
// Mostrar la ruta del fichero en la barra de estado
this.etbarestPpal.Text = ruta;
// Aún no ha sido modificado
FormHijo.rtbText.Modified = false;
}
}
private void VerBarraDeHerramientas_Click(object sender, EventArgs e)
{
VerBarraDeHerramientas.Checked = !VerBarraDeHerramientas.Checked;
BarraDeHerraMdiPadre.Visible = VerBarraDeHerramientas.Checked;
}
private void VerBarraDeEstado_Click(object sender, EventArgs e)
{
VerBarraDeEstado.Checked = !VerBarraDeEstado.Checked;
BarraDeEstado.Visible = VerBarraDeEstado.Checked;
}
private void VentanaCascada_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
private void VentanaMosaicoHorizontal_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
private void VentanaMosaicoVertical_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
private void VentanaOrganizar_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.ArrangeIcons);
}
private void FormMDI_MdiChildActivate(object sender, EventArgs e)
{
// Eliminar cualquier fusión previa
ToolStripManager.RevertMerge(this.BarraDeHerraMdiPadre);
// Ventana hija activa
FormDocumento vHijaAc = (FormDocumento)this.ActiveMdiChild;
// Realizar la fusión si hay una ventana hija activa
if (vHijaAc != null)
ToolStripManager.Merge(vHijaAc.BarraDeHerraMdiHila,
this.BarraDeHerraMdiPadre);
}
}
}
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.