Uso de los siguientes objetos
Timer --> name: temporizador
ContexMenuStrip -- name: MenuContextPais
StatusStrip --> name: BarraDeEstado
ToolStrip --> name:BarraDeHerramientas
MenuStrip --> name: BarraDeMenus
___________________________________________
Opciones que contendrá el Menu: BarraDeMenus
Opción Archivo / Abrir Evento: click
OpenFileDialog DlgAbrir = new OpenFileDialog();
DlgAbrir.InitialDirectory = Directory.GetCurrentDirectory();
DlgAbrir.Filter = "fichero binario (*.bin) *.bin";
DlgAbrir.FilterIndex = 1;
DlgAbrir.RestoreDirectory = true;
// Mostrar el diálogo Abrir
if (DlgAbrir.ShowDialog() == DialogResult.OK)
{
// Eliminar la configuación inicialmnte establecida
int ind;
ind = ListaPaises.Count - 1;
while (ind >= 0)
{
// Eliminar elemento de List, País y menú contextual
EliminarPais(ind);
ind -= 1;
}
// Obtener los datos del fichero
Deseriar(DlgAbrir.FileName);
}
Opción Archivo / Guardar Evento: click
SaveFileDialog DlgGuardar = new SaveFileDialog();
DlgGuardar.InitialDirectory = Directory.GetCurrentDirectory();
DlgGuardar.Filter = "fichero binario (*.bin) *.bin";
DlgGuardar.FilterIndex = 1;
DlgGuardar.RestoreDirectory = true;
if (DlgGuardar.ShowDialog() == DialogResult.OK)
{
// Guardar los datos en el fichero
Seriar(DlgGuardar.FileName);
}
Opción Ayuda / A cerca de Evento: click
{
string mensaje ="Reloj Despertador.V1.0" + Environment.NewLine + "Copyright (c)colocar su nombre";
MessageBox.Show(mensaje, "Acerca de Reloj Despertador");
}
Creación de nuevo evento Obtener Datos
public List ObtenerDatos()
{
return ListaPaises;
}
Opción Despertador / Activar
if (!DespertadorActivado)
{
DespertadorActivar.Text = "Desactivar";
btbarDespertador.ToolTipText = "Desactivar";
DespertadorActivado = true;
}
else
{
DespertadorActivar.Text = "Activar";
btbarDespertador.ToolTipText = "Activar";
DespertadorActivado = false;
}
Opción Pais / Anadir
// Actúa sobre el menú País y sobre el menú contextual
DlgAgregarPais dlg = new DlgAgregarPais();
if (dlg.ShowDialog() == DialogResult.Cancel) return;
string sPais = dlg.ctPais.Text;
long dDifH = ObtenerHora(dlg.ctDifHoraria);
if (sPais.Length == 0 or dDifH == -1)
{
MessageBox.Show("Datos no válidos");
return;
}
if (dlg.cvPorsNeg.Checked) dDifH = -dDifH;
/ Crear objeto Pais
Pais unPais = new Pais(sPais, dDifH);
/ Añadir el objeto Pais al objeto List
ListaPaises.Add(unPais);
// Añadir elemento al menú País y al menú contextual
AñadirPaisAMenu(sPais);
Opción Pais / Eliminar
// Actúa sobre el menú País y sobre el menú contextual
DlgBorrarPais dlg = new DlgBorrarPais();
// this (Form1) será el propietario de dlg
if (dlg.ShowDialog(this) == DialogResult.Cancel)
return;
int indElemSelec = dlg.lsListaPaises.SelectedIndex;
if (indElemSelec == -1) return;
// Eliminar el elemento seleccinado en el control lista
dlg.lsListaPaises.Items.RemoveAt(indElemSelec);
// Eliminar el elemento seleccinado en List, País y menú contextual
EliminarPais(indElemSelec);
FUNCION DE USUARIO Eliminar Pais
private void EliminarPais(int ind)
{
// Eliminar el elemento de índice ind en List
ListaPaises.RemoveAt(ind);
// Eliminar el elemento de índice ind en el menú País y en el contextual
menuPais.DropDownItems.RemoveAt(3 + ind);
MenuContextPais.Items.RemoveAt(3 + ind);
if (menuPais.DropDownItems.Count == 3)
{
// No quedan más países. Ocultar los elementos Eliminar y Separador2
PaisEliminar.Visible = false;
Separador2.Visible = false;
ContextPaisEliminar.Visible = false;
ContextSeparador1.Visible = false;
}
}
CODIFICACIÓN OBJETO TEMPORIZADOR EVENTO ELAPSED
private void Temporizador_Elapsed(System.Object sender, System.Timers.ElapsedEventArgs e)
{
ctHora.Text = DateTime.Now.ToLongTimeString();
ctHoraPais.Text = DateTime.Now.AddTicks(DiferenciaHoraria).ToLongTimeString();
// Un tick (paso) = 100 nanosegundos
long horaActual = DateTime.Now.TimeOfDay.Ticks / 10000000L; // en segundos
lon horaDespertador = ObtenerHoraDespertador() / 10000000L; // en segundos
//Debug.WriteLine(horaActual)
//Debug.WriteLine(horaDespertador)
if (DespertadorActivado && horaDespertador != -1)
{
if (horaActual < horaDespertador)
{
// Aun no ha llegado la hora de la alarma,
// pero hay un caso especial en el que debe
// sonar: acaba de ser medianoche, estamos en
// los primeros minutos del día y la alarma
// estaba puesta en los últimos minutos de ayer.
if (horaDespertador - horaActual > 86400 - 300)
{
Console.Beep();
}
}
else
{
// La hora de la alarma ya ha pasado. Si hace mas
// de cinco minutos, NO debe sonar. Si aun no han
// transcurrido los cinco minutos, SI debe sonar.
if (horaActual - horaDespertador < 300)
{
Console.Beep();
}
}
}
}
EVENTO OBTENER HORA
private long ObtenerHora(MaskedTextBox cajaTexto)
{
// Obtener la hora de una caja de texto MaskedTextBox.
// Si no se introducen al menos horas:minutos,
// la función devolverá -1.
char delim = ':';
string[] hms;
hms = cajaTexto.Text.Split(delim);
if (hms.Length < 2) return -1;
int horas = int.Parse(hms[0]);
int minutos;
int segundos;
if (hms[1].Length != 0)
{
minutos = int.Parse(hms[1]);
}
else
{
minutos = 0;
}
if (hms.Length > 2 && hms[2].Length != 0)
{
segundos = int.Parse(hms[2]);
}
else
{
segundos = 0;
}
// Si la hora no es válida, la función devolverá -1
if (horas < 0 OR horas > 23 OR minutos < 0 OR minutos > 59 OR segundos < 0 OR segundos > 59)
{
return -1; // hora no válida
}
return new TimeSpan(horas, minutos, segundos).Ticks; // hora válida
}
EVENTO OBTENER HORA DESPERTADOR
private long ObtenerHoraDespertador()
{
// Obtener la hora del despertador en segundos.
// Si no se introducen al menos horas:minutos,
// la función devolverá -1
return ObtenerHora(ctDespertador); // ticks
}
EVENTO AÑADIR PAIS A MENU
private void AñadirPaisAMenu(string sPais)
{
// Inicialmente hay 3 elementos (dos ocultos)
if (menuPais.DropDownItems.Count == 3)
{
// Hacer visibles los elementos Eliminar y el separador
PaisEliminar.Visible = true;
Separador2.Visible = true;
ContextPaisEliminar.Visible = true;
ContextSeparador1.Visible = true;
}
// Crear un elemento
ToolStripMenuItem elemento = new ToolStripMenuItem(sPais);
ToolStripMenuItem contextElemento = new ToolStripMenuItem(sPais);
// Especificar cuál será su controlador de eventos Click
elemento.Click += new System.EventHandler(ElementoMenuPais_Click);
contextElemento.Click += new System.EventHandler(ElementoMenuPais_Click);
// Añadir el elemento al menú
menuPais.DropDownItems.Add(elemento);
MenuContextPais.Items.Add(contextElemento);
}
METODO ELEMENTO MENU PAIS
private void ElementoMenuPais_Click(System.Object sender, System.EventArgs e)
{
// Controlador para los elementos del menú País y sobre del menú contextual
ToolStripMenuItem elemento = (ToolStripMenuItem)sender;
etPais.Text = elemento.Text;
int ind = elemento.Owner.Items.IndexOf(elemento);
Pais objPais = ListaPaises[ind - 3];
DiferenciaHoraria = objPais.ObtenerDifHor();
}
EVENTO FORM CLOSING DEL FORMULARIO
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (File.Exists("DifsHorsPredeterminado.bin"))
{
DialogResult respuesta;
Respuesta = MessageBox.Show("¿Desea sobrescribir el fichero predeterminado?", "Seleccione una opción", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (respuesta == DialogResult.No)
{
ArchivoGuardar.PerformClick(); // clic en Guardar
return;
}
}
Seriar("DifsHorsPredeterminado.bin");
}
EVENTO SERIAR
private void Seriar(string fichero)
{
if (ListaPaises == null)
{
return;
}
Stream fs = File.Create(fichero);
BinaryFormatter seriador = new BinaryFormatter();
seriador.Serialize(fs, ListaPaises);
fs.Close();
}
EVENTO LOAD DEL FORMULARIO
private void Form1_Load(object sender, EventArgs e)
{
ListaPaises = new List();
if (File.Exists("DifsHorsPredeterminado.bin"))
{
Deseriar("DifsHorsPredeterminado.bin");
}
}
EVENTO DESERIAR
private void Deseriar(string fichero)
{
Stream fs = File.OpenRead(fichero);
BinaryFormatter deseriador = new BinaryFormatter();
// Añadir los países a la lista
ListaPaises = ((List)deseriador.Deserialize(fs));
fs.Close();
// Construir el menú País y el menú contextual
Pais unPais;
foreach (Pais tempLoopVar_unPais in ListaPaises)
{
unPais = tempLoopVar_unPais;
AñadirPaisAMenu(unPais.ToString());
}
}
FINALIZACIÓN CODIFICACIÓN DEL FORMULARIO PRINCIPAL
NOTA:
Verificar que existan los siguientes namespace
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
INICIO CODIFICACIÓN DE NUEVOS FORMULARIOS
PARA AGREGAR PAIS
PARA ELIMINAR PAIS
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace RelojDespertador
{
public partial class DlgBorrarPais : Form
{
public DlgBorrarPais()
{
InitializeComponent();
}
private void DlgBorrarPais_Load(object sender, EventArgs e)
{
// Llenar la lista con los nombres de los países
List objListaPaises = ((Form1) this.Owner).ObtenerDatos();
Pais elemento;
foreach (Pais tempLoopVar_elemento in objListaPaises)
{
elemento = tempLoopVar_elemento;
lsListaPaises.Items.Add(elemento);
}
}
}
}
Timer --> name: temporizador
ContexMenuStrip -- name: MenuContextPais
StatusStrip --> name: BarraDeEstado
ToolStrip --> name:BarraDeHerramientas
MenuStrip --> name: BarraDeMenus
___________________________________________
Opciones que contendrá el Menu: BarraDeMenus
- Archivo
- Abrir
- Guardar
- Salir
- Despertador
- Activar
- Pais
- Añadir
- Eliminar
- Ayuda
- A cerca de
Opción Archivo / Abrir Evento: click
OpenFileDialog DlgAbrir = new OpenFileDialog();
DlgAbrir.InitialDirectory = Directory.GetCurrentDirectory();
DlgAbrir.Filter = "fichero binario (*.bin) *.bin";
DlgAbrir.FilterIndex = 1;
DlgAbrir.RestoreDirectory = true;
// Mostrar el diálogo Abrir
if (DlgAbrir.ShowDialog() == DialogResult.OK)
{
// Eliminar la configuación inicialmnte establecida
int ind;
ind = ListaPaises.Count - 1;
while (ind >= 0)
{
// Eliminar elemento de List, País y menú contextual
EliminarPais(ind);
ind -= 1;
}
// Obtener los datos del fichero
Deseriar(DlgAbrir.FileName);
}
Opción Archivo / Guardar Evento: click
SaveFileDialog DlgGuardar = new SaveFileDialog();
DlgGuardar.InitialDirectory = Directory.GetCurrentDirectory();
DlgGuardar.Filter = "fichero binario (*.bin) *.bin";
DlgGuardar.FilterIndex = 1;
DlgGuardar.RestoreDirectory = true;
if (DlgGuardar.ShowDialog() == DialogResult.OK)
{
// Guardar los datos en el fichero
Seriar(DlgGuardar.FileName);
}
Opción Ayuda / A cerca de Evento: click
{
string mensaje ="Reloj Despertador.V1.0" + Environment.NewLine + "Copyright (c)colocar su nombre";
MessageBox.Show(mensaje, "Acerca de Reloj Despertador");
}
Creación de nuevo evento Obtener Datos
public List
{
return ListaPaises;
}
Opción Despertador / Activar
if (!DespertadorActivado)
{
DespertadorActivar.Text = "Desactivar";
btbarDespertador.ToolTipText = "Desactivar";
DespertadorActivado = true;
}
else
{
DespertadorActivar.Text = "Activar";
btbarDespertador.ToolTipText = "Activar";
DespertadorActivado = false;
}
Opción Pais / Anadir
// Actúa sobre el menú País y sobre el menú contextual
DlgAgregarPais dlg = new DlgAgregarPais();
if (dlg.ShowDialog() == DialogResult.Cancel) return;
string sPais = dlg.ctPais.Text;
long dDifH = ObtenerHora(dlg.ctDifHoraria);
if (sPais.Length == 0 or dDifH == -1)
{
MessageBox.Show("Datos no válidos");
return;
}
if (dlg.cvPorsNeg.Checked) dDifH = -dDifH;
/ Crear objeto Pais
Pais unPais = new Pais(sPais, dDifH);
/ Añadir el objeto Pais al objeto List
ListaPaises.Add(unPais);
// Añadir elemento al menú País y al menú contextual
AñadirPaisAMenu(sPais);
Opción Pais / Eliminar
// Actúa sobre el menú País y sobre el menú contextual
DlgBorrarPais dlg = new DlgBorrarPais();
// this (Form1) será el propietario de dlg
if (dlg.ShowDialog(this) == DialogResult.Cancel)
return;
int indElemSelec = dlg.lsListaPaises.SelectedIndex;
if (indElemSelec == -1) return;
// Eliminar el elemento seleccinado en el control lista
dlg.lsListaPaises.Items.RemoveAt(indElemSelec);
// Eliminar el elemento seleccinado en List, País y menú contextual
EliminarPais(indElemSelec);
FUNCION DE USUARIO Eliminar Pais
private void EliminarPais(int ind)
{
// Eliminar el elemento de índice ind en List
ListaPaises.RemoveAt(ind);
// Eliminar el elemento de índice ind en el menú País y en el contextual
menuPais.DropDownItems.RemoveAt(3 + ind);
MenuContextPais.Items.RemoveAt(3 + ind);
if (menuPais.DropDownItems.Count == 3)
{
// No quedan más países. Ocultar los elementos Eliminar y Separador2
PaisEliminar.Visible = false;
Separador2.Visible = false;
ContextPaisEliminar.Visible = false;
ContextSeparador1.Visible = false;
}
}
CODIFICACIÓN OBJETO TEMPORIZADOR EVENTO ELAPSED
private void Temporizador_Elapsed(System.Object sender, System.Timers.ElapsedEventArgs e)
{
ctHora.Text = DateTime.Now.ToLongTimeString();
ctHoraPais.Text = DateTime.Now.AddTicks(DiferenciaHoraria).ToLongTimeString();
// Un tick (paso) = 100 nanosegundos
long horaActual = DateTime.Now.TimeOfDay.Ticks / 10000000L; // en segundos
lon horaDespertador = ObtenerHoraDespertador() / 10000000L; // en segundos
//Debug.WriteLine(horaActual)
//Debug.WriteLine(horaDespertador)
if (DespertadorActivado && horaDespertador != -1)
{
if (horaActual < horaDespertador)
{
// Aun no ha llegado la hora de la alarma,
// pero hay un caso especial en el que debe
// sonar: acaba de ser medianoche, estamos en
// los primeros minutos del día y la alarma
// estaba puesta en los últimos minutos de ayer.
if (horaDespertador - horaActual > 86400 - 300)
{
Console.Beep();
}
}
else
{
// La hora de la alarma ya ha pasado. Si hace mas
// de cinco minutos, NO debe sonar. Si aun no han
// transcurrido los cinco minutos, SI debe sonar.
if (horaActual - horaDespertador < 300)
{
Console.Beep();
}
}
}
}
EVENTO OBTENER HORA
private long ObtenerHora(MaskedTextBox cajaTexto)
{
// Obtener la hora de una caja de texto MaskedTextBox.
// Si no se introducen al menos horas:minutos,
// la función devolverá -1.
char delim = ':';
string[] hms;
hms = cajaTexto.Text.Split(delim);
if (hms.Length < 2) return -1;
int horas = int.Parse(hms[0]);
int minutos;
int segundos;
if (hms[1].Length != 0)
{
minutos = int.Parse(hms[1]);
}
else
{
minutos = 0;
}
if (hms.Length > 2 && hms[2].Length != 0)
{
segundos = int.Parse(hms[2]);
}
else
{
segundos = 0;
}
// Si la hora no es válida, la función devolverá -1
if (horas < 0 OR horas > 23 OR minutos < 0 OR minutos > 59 OR segundos < 0 OR segundos > 59)
{
return -1; // hora no válida
}
return new TimeSpan(horas, minutos, segundos).Ticks; // hora válida
}
EVENTO OBTENER HORA DESPERTADOR
private long ObtenerHoraDespertador()
{
// Obtener la hora del despertador en segundos.
// Si no se introducen al menos horas:minutos,
// la función devolverá -1
return ObtenerHora(ctDespertador); // ticks
}
EVENTO AÑADIR PAIS A MENU
private void AñadirPaisAMenu(string sPais)
{
// Inicialmente hay 3 elementos (dos ocultos)
if (menuPais.DropDownItems.Count == 3)
{
// Hacer visibles los elementos Eliminar y el separador
PaisEliminar.Visible = true;
Separador2.Visible = true;
ContextPaisEliminar.Visible = true;
ContextSeparador1.Visible = true;
}
// Crear un elemento
ToolStripMenuItem elemento = new ToolStripMenuItem(sPais);
ToolStripMenuItem contextElemento = new ToolStripMenuItem(sPais);
// Especificar cuál será su controlador de eventos Click
elemento.Click += new System.EventHandler(ElementoMenuPais_Click);
contextElemento.Click += new System.EventHandler(ElementoMenuPais_Click);
// Añadir el elemento al menú
menuPais.DropDownItems.Add(elemento);
MenuContextPais.Items.Add(contextElemento);
}
METODO ELEMENTO MENU PAIS
private void ElementoMenuPais_Click(System.Object sender, System.EventArgs e)
{
// Controlador para los elementos del menú País y sobre del menú contextual
ToolStripMenuItem elemento = (ToolStripMenuItem)sender;
etPais.Text = elemento.Text;
int ind = elemento.Owner.Items.IndexOf(elemento);
Pais objPais = ListaPaises[ind - 3];
DiferenciaHoraria = objPais.ObtenerDifHor();
}
EVENTO FORM CLOSING DEL FORMULARIO
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (File.Exists("DifsHorsPredeterminado.bin"))
{
DialogResult respuesta;
Respuesta = MessageBox.Show("¿Desea sobrescribir el fichero predeterminado?", "Seleccione una opción", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (respuesta == DialogResult.No)
{
ArchivoGuardar.PerformClick(); // clic en Guardar
return;
}
}
Seriar("DifsHorsPredeterminado.bin");
}
EVENTO SERIAR
private void Seriar(string fichero)
{
if (ListaPaises == null)
{
return;
}
Stream fs = File.Create(fichero);
BinaryFormatter seriador = new BinaryFormatter();
seriador.Serialize(fs, ListaPaises);
fs.Close();
}
EVENTO LOAD DEL FORMULARIO
private void Form1_Load(object sender, EventArgs e)
{
ListaPaises = new List
if (File.Exists("DifsHorsPredeterminado.bin"))
{
Deseriar("DifsHorsPredeterminado.bin");
}
}
EVENTO DESERIAR
private void Deseriar(string fichero)
{
Stream fs = File.OpenRead(fichero);
BinaryFormatter deseriador = new BinaryFormatter();
// Añadir los países a la lista
ListaPaises = ((List
fs.Close();
// Construir el menú País y el menú contextual
Pais unPais;
foreach (Pais tempLoopVar_unPais in ListaPaises)
{
unPais = tempLoopVar_unPais;
AñadirPaisAMenu(unPais.ToString());
}
}
FINALIZACIÓN CODIFICACIÓN DEL FORMULARIO PRINCIPAL
NOTA:
Verificar que existan los siguientes namespace
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
INICIO CODIFICACIÓN DE NUEVOS FORMULARIOS
PARA AGREGAR PAIS
PARA ELIMINAR PAIS
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace RelojDespertador
{
public partial class DlgBorrarPais : Form
{
public DlgBorrarPais()
{
InitializeComponent();
}
private void DlgBorrarPais_Load(object sender, EventArgs e)
{
// Llenar la lista con los nombres de los países
List
Pais elemento;
foreach (Pais tempLoopVar_elemento in objListaPaises)
{
elemento = tempLoopVar_elemento;
lsListaPaises.Items.Add(elemento);
}
}
}
}
No hay comentarios:
Publicar un comentario