31 mayo 2006
Almacenamiento de conocimiento
30 mayo 2006
Conversor numero a letras con c# (1)
Aqui la pantalla

Y aqui les dejo el codigo, espero sus comentarios y claro sus ideas para mejorar este programita, que quizas sencillo, pero a veces muy util cuando tienes que elaborarte un presupuestillo y necesitas poner la cantidad en letra.
using System;
using Gtk;
class nletras
{
static Gtk.Window w;
static Gtk.Entry tcantidad;
static Gtk.Entry tresultado;
static Gtk.Button bconvertir;
static Gtk.Button bsalir;
static String UnoAl15(double N)
{
String[] numero = new String[17];
numero[0] = "CERO ";
numero[1] = "UN ";
numero[2] = "DOS ";
numero[3] = "TRES ";
numero[4] = "CUATRO ";
numero[5] = "CINCO ";
numero[6] = "SEIS ";
numero[7] = "SIETE ";
numero[8] = "OCHO ";
numero[9] = "NUEVE ";
numero[10] = "DIEZ ";
numero[11] = "ONCE ";
numero[12] = "DOCE ";
numero[13] = "TRECE ";
numero[14] = "CATORCE ";
numero[15] = "QUINCE ";
return numero[Convert.ToInt32(N)];
}
static void Main()
{
Application.Init();
w = new Gtk.Window("Convierte numero a letras");
w.SetDefaultSize(450,150);
w.DeleteEvent += new DeleteEventHandler(Cerrar);
Gtk.VBox panelv = new Gtk.VBox();
Gtk.HBox panelsup = new Gtk.HBox(false, 5);
panelv.PackStart(panelsup,false, false, 5);
Gtk.Label lbl1 = new Gtk.Label("Cantidad en numero ");
tcantidad = new Gtk.Entry();
bconvertir = new Button("Convertir a letras");
bconvertir.Clicked += OnButtonClickedConvertir;
panelsup.PackStart(lbl1, false, false, 5);
panelsup.PackStart(tcantidad, false, false, 5);
panelsup.PackStart(bconvertir, false, false, 5);
Gtk.Label lbl2 = new Gtk.Label("Numero en letra ");
tresultado = new Gtk.Entry();
Gtk.HBox panelres = new Gtk.HBox(false, 5);
panelv.PackStart(panelres, false, false, 5);
panelres.PackStart(lbl2, false, false, 5);
panelres.PackStart(tresultado, true, true, 5);
bsalir = new Button(Stock.Quit);
bsalir.Clicked += OnButtonClicked;
panelv.PackStart(bsalir, false, false, 5);
w.Add(panelv);
w.ShowAll();
Application.Run();
}
static void Cerrar(object o, DeleteEventArgs args)
{
args.RetVal = true;
Application.Quit();
}
static void OnButtonClicked(object o, EventArgs args)
{
Application.Quit();
}
static void OnButtonClickedConvertir(object o, EventArgs args)
{
String aux = UnoAl15(Convert.ToDouble(tcantidad.Text));
tresultado.Text = aux;
}
}
27 mayo 2006
Ya tengo algo
26 mayo 2006
Avances lentos
25 mayo 2006
Un intruso sospechoso
24 mayo 2006
Desarrollo de software en México
12 mayo 2006
Cambiando de distro Linux
using System;
using Gtk;
class miventana
{
static void Main(String[] args)
{
Application.Quit();
Window v = new Window("Mi ventana");
v.ShowAll();
Application.Init();
}
}
Mucho ojo el codigo esta mal! jejeje
04 abril 2006
Utopo practica 1 ( I ) C#
Por el momento aqui le dejo, pero se ira publicando el codigo y pantallazos que resulte.
03 abril 2006
Me preguntaba sobre Mysql embebido y C#
31 marzo 2006
Clases con C#
using System;
class Tabla
{
private int NumeroRenglones;
private int PosicionActual;
//Constructor
public Tabla()
{
NumRenglones = 0;
Posicion = 0;
}
public int NumRenglones
{
get
{
return this.NumeroRenglones;
}
set
{
this.NumeroRenglones = value;
}
}
public int Posicion
{
get
{
return this.PosicionActual;
}
set
{
this.PosicionActual = value;
}
}
public Boolean AgregaRenglon()
{
NumRenglones+=1;
return true;
}
public Boolean MueveAdelante()
{
Posicion +=1;
return true;
}
public Boolean MueveAtras()
{
Posicion -=1;
return true;
}
public Boolean MueveUltimo()
{
Posicion = NumRenglones;
return true;
}
public Boolean MuevePrimero()
{
Posicion = 0;
return true;
}
}
class Agenda
{
static void Main()
{
Tabla rt = new Tabla();
Console.WriteLine("Inicializacion ..... ");
Console.WriteLine("Renglones: {0}", rt.NumRenglones);
Console.WriteLine("Posicion: {0}", rt.Posicion);
Console.WriteLine("-------------------------------------");
int opcion;
do
{
Console.WriteLine("Menu");
Console.WriteLine("1.- Agregar registro");
Console.WriteLine("2.- Numero de registros");
Console.WriteLine("3.- Posicion actual");
Console.WriteLine("4.- Mover primero");
Console.WriteLine("5.- Mover atras");
Console.WriteLine("6.- Mover adelante");
Console.WriteLine("7.- Mover ultimo");
Console.WriteLine("8.- Salir");
Console.WriteLine("Elija una opcion: ");
opcion = Console.Read();
Console.Read();
switch(opcion)
{
case '1':
if(rt.AgregaRenglon())
Console.WriteLine("Agregado");
break;
case '2':
Console.WriteLine("Renglones: {0}", rt.NumRenglones);
break;
case '3':
Console.WriteLine("Posicion: {0}",rt.Posicion);
break;
case '6':
if(rt.MueveAdelante())
Console.WriteLine("Listo");
break;
}
}while(opcion!='8');
}
}
aun faltan las otras instrucciones, pero creo que es facil de implementar lo que falta.
30 marzo 2006
Un poco de Miguel de Icaza
Miguel de Icaza, creador del proyecto Mono y uno de los mejores programadores de software libre, en los años 90 estudiante de la Universidad Autonoma de México desarrolla un software para la manipulación de archivos (mid night commander) , crea el escritorio para linux gnome, y funda su empresa Ximian donde empieza a desarrollar el proyecto Mono, que es una plataforma .Net para desarrollo de software libre, actualmente vive en Boston, trabaja en Novell y sigue a cargo de la dirección del proyecto Mono.
Su blog: http://tirania.org/blog/index.html
Levantando a Mysql
El error en cuestión era este:
shell>>mysql -u root -p
Enter password:
Me botaba este error
Error 2002 (HY000) Can't connect to local MySQL server through socket '/tmp'
y la verdad que era un quebradero de cabeza, así que busque como solucionarlo, y esta es hasta ahorita la manera de levantar al demonio de Mysql.
shell>>/usr/bin/mysqld --skip-grant-tables --user=root
Esto me arroja un comentario acerca de problemas creo con las tablas tipo INNODB
y despues de esto un ctrl+d
En fin esto me ha solucionado mi problema, espero les sirva en su caso.
29 marzo 2006
Acerca de la agenda
La idea es tener una forma mas general para el recorrido de los registros y despues este codigo pueda ser reutilizado en proyectos similares.
mas o menos asi:
class Mitabla
{
Private int PosicionRenglon;
public Mitabla()
{
//Aqui inicializar las variables de acuerdo a los datos de la bd
}
public MoverSiguiente()
{
this.PosicionRenglon+=1;
//Posicion+=1;
}
public int Posicion()
{
get
{
return this.PosicionRenglon;
}
set
{
this.PosicionRenglon=value;
}
}
bueno hasta aqui llevo la idea, si alguien considera algo mejor no duden en comentar
27 marzo 2006
Creacion de una ventana con Gtk
using System;
using Gtk;
class Miventana
{
static void Main(string[] args)
{
Application.Init();
Miventana window = new Miventana();
Application.Run();
}
public Miventana() //Constructor de la ventana
{
Gtk.Window v = new Gtk.Window("Mi ventana");
v.DeleteEvent += new DeleteEventHandler(OnDeleteWindow);
v.ShowAll();
}
static void OnDeleteWindow(object obj, DeleteEventArgs args)
{
Application.Quit();
}
}
compilar de la siguiente: mcs Miventana.cs -pkg:gtk-sharp
Ejecutar: mono Miventana.exe
Resultado que se obtiene

23 marzo 2006
Codigo C# y Gtk# agenda sencilla
// Proyecto: Sencilla Agenda de contactos
// Desarrollo: gsur
// Fecha: 18/03/2006
// Compilar:
// mcs sagenda.cs -pkg:gtk-sharp -pkg:glade-sharp -r:System.Data.dll
// -r:Mysql.Data.dll -resource:vagenda.glade
// Entorno de desarrollo: Mono
// Comentarios: El borrado de contactos tiene un error, ya que no recorre el
// numero actual de contactos, falta añadir un poco mas de codigo,
// pero el borrado si lo aplica correctamente, asi que quedan
// advertidos
//--------------------------------------------------------------------------
using System;
using System.Data;
using MySql.Data.MySqlClient;
using Gtk;
using Glade;
public class Agenda
{
[Glade.Widget] Gtk.Window ventana;
[Glade.Widget] Gtk.Entry txtcontacto;
[Glade.Widget] Gtk.Entry txtdire;
[Glade.Widget] Gtk.Entry txttel;
[Glade.Widget] Gtk.Entry txtmail;
[Glade.Widget] Gtk.Label lblnregs;
[Glade.Widget] Gtk.Entry txtbusqueda;
public string sql; //Variable para las cadenas de consulta
public string connectionString;
public IDbConnection dbcon;
public IDbCommand dbcmd;
public IDataReader reader;
public int npos; //Renglon actual
public long nc; //Numero de renglones
public System.UInt32 id_contacto; //Clave primaria de los contactos
public string nombre; //Nombre del contacto
public string direccion; //Direccion del contacto
public string telefono; //Telefono del contacto
public string email; //Email del contacto
public int opcion; //Situacion actual [Insercion o Update]
public static void Main(String[] args)
{
Application.Init();
Agenda gt=new Agenda();
Application.Run();
}
public Agenda()
{
Glade.XML gxml=new Glade.XML(null, "vagenda.glade","ventana",null);
gxml.Autoconnect(this);
connectionString ="Server=localhost;" + "Database=personal;" + "User ID=rafita;" + "Password=;" + "Pooling=false";
dbcon = new MySqlConnection(connectionString);
dbcon.Open();
dbcmd = dbcon.CreateCommand();
sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto LIMIT 0,1";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
leer_contacto(reader);
npos=0;
dhabilita(false);
reader.Close();
reader=null;
sql = "SELECT COUNT(id_contacto) AS ncount FROM miscontactos";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
reader.Read();
nc = (long) reader["ncount"];
lblnregs.Text="Contacto: 1 de " + nc;
opcion=0;
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
}
public void on_ventana_delete_event(object o, DeleteEventArgs args)
{
dbcon.Close();
dbcon = null;
Application.Quit();
}
public void on_bsalir_clicked(System.Object b, EventArgs e)
{
dbcon.Close();
dbcon = null;
Application.Quit();
}
public void on_bprimero_clicked(System.Object b, EventArgs e)
{
npos=0;
lblnregs.Text="Contacto: 1 de " + nc;
mover();
}
public void on_banterior_clicked(System.Object b, EventArgs e)
{
if(npos>0) {
npos-=1;
mover();
}
else
advierte("\n\nSe ha llegado al primer contacto");
lblnregs.Text="Contacto: " + (int) (npos + 1) + " de " + nc;
}
public void on_bsiguiente_clicked(System.Object b, EventArgs e)
{
if(npos<((int) nc-1)) {
npos+=1;
mover();
}
else
advierte("\n\nSe ha llegado al ultimo contacto");
lblnregs.Text="Contacto: " + (int) (npos + 1) + " de " + nc;
}
public void on_bultimo_clicked(System.Object b, EventArgs e)
{
npos=(int) (nc-1);
mover();
lblnregs.Text="Contacto: " + nc + " de " + nc;
}
public void guardar_cancelar()
{
nombre = txtcontacto.Text;
direccion = txtdire.Text;
telefono = txttel.Text;
email = txtmail.Text;
}
public void on_bnuevo_clicked(System.Object b, EventArgs e)
{
dhabilita(true);
guardar_cancelar();
txtcontacto.Text="";
txtdire.Text="";
txttel.Text="";
txtmail.Text="";
opcion=1;
}
public void on_beditar_clicked(System.Object b, EventArgs e)
{
dhabilita(true);
guardar_cancelar();
opcion=2;
}
public void on_bguardar_clicked(System.Object b, EventArgs e)
{
dbcmd = dbcon.CreateCommand();
switch(opcion)
{
case 0:
String msg;
msg="\n\nNo ha elegido alguna opcion [Nuevo/Editar]";
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok,msg);
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok) {
md.Destroy();
}
break;
case 1:
guardar_nuevo();
break;
case 2:
guardar_edicion();
break;
}
opcion=0;
dhabilita(false);
}
public void guardar_nuevo()
{
sql = "INSERT INTO miscontactos(nombre_contacto, direccion_contacto, telefono_contacto, email_contacto) VALUES(";
sql = sql + "'" + txtcontacto.Text + "','" + txtdire.Text + "','" + txttel.Text + "','" + txtmail.Text + "')";
dbcmd.CommandText = sql;
dbcmd.ExecuteNonQuery();
sql = "SELECT COUNT(id_contacto) AS ncount FROM miscontactos";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
reader.Read();
nc = (long) reader["ncount"];
nc-=1;
reader.Close();
reader = null;
sql = "SELECT * FROM miscontactos ORDER BY id_contacto LIMIT " + nc + ",1";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
reader.Read();
System.UInt32 na = (System.UInt32) reader["id_contacto"];
id_contacto = na;
reader.Close();
reader = null;
sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
int ncont=0;
while(reader.Read() && ((System.UInt32) reader["id_contacto"]!=na)) {
ncont+=1;
}
npos=ncont;
ncont+=1;
nc+=1;
lblnregs.Text = "Contacto: " + ncont + " de " + nc;
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
}
public void guardar_edicion()
{
sql = "UPDATE miscontactos SET nombre_contacto='" + txtcontacto.Text + "',";
sql = sql + "direccion_contacto='" + txtdire.Text + "',";
sql = sql + "telefono_contacto='" + txttel.Text + "',";
sql = sql + "email_contacto='" + txtmail.Text + "' WHERE id_contacto=" + id_contacto;
dbcmd.CommandText = sql;
dbcmd.ExecuteNonQuery();
dbcmd.Dispose();
dbcmd = null;
}
public void on_bcancelar_clicked(System.Object b, EventArgs e)
{
txtcontacto.Text = nombre;
txtdire.Text = direccion;
txttel.Text = telefono;
txtmail.Text = email;
dhabilita(false);
}
public void on_beliminar_clicked(System.Object b, EventArgs e)
{
String msgdelete;
msgdelete="\n¿Desea realmente eliminar este contacto?";
msgdelete = msgdelete + "\n\nSi desea continuar pulse Aceptar, si no";
msgdelete = msgdelete + "\ndesea continuar pulse Cancelar";
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.OkCancel,msgdelete);
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok) {
dbcon = new MySqlConnection(connectionString);
dbcon.Open();
dbcmd = dbcon.CreateCommand();
sql = "DELETE FROM miscontactos WHERE id_contacto=" + id_contacto;
dbcmd.CommandText = sql;
dbcmd.ExecuteNonQuery();
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
dbcon = null;
md.Destroy();
}
else
md.Destroy();
}
public void on_bbuscar_clicked(System.Object b, EventArgs e)
{
dbcmd = dbcon.CreateCommand();
sql = "SELECT * FROM miscontactos WHERE nombre_contacto LIKE '" + txtbusqueda.Text + "%'";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
if(reader.Read())
{
id_contacto = (System.UInt32) reader["id_contacto"];
System.UInt32 na = id_contacto;
txtcontacto.Text=(string) reader["nombre_contacto"];
txtdire.Text=(string) reader["direccion_contacto"];
txttel.Text=(string) reader["telefono_contacto"];
txtmail.Text=(string) reader["email_contacto"];
reader.Close();
reader = null;
sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
int ncont=0;
while(reader.Read() && ((System.UInt32) reader["id_contacto"]!=na)) {
ncont+=1;
}
npos=ncont;
ncont+=1;
lblnregs.Text = "Contacto: " + ncont + " de " + nc;
reader.Close();
reader = null;
}
else
{
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, "\n\nNo se enontro alguna coincidencia");
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok)
md.Destroy();
}
dbcmd.Dispose();
dbcmd = null;
}
public void mover()
{
dbcmd = dbcon.CreateCommand();
sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto LIMIT " + npos + ",1";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
leer_contacto(reader);
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
}
public void dhabilita(Boolean valor)
{
txtcontacto.Editable = valor;
txtdire.Editable = valor;
txttel.Editable = valor;
txtmail.Editable = valor;
}
public void advierte(String mensaje)
{
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, mensaje);
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok)
md.Destroy();
}
public void leer_contacto(IDataReader mireader)
{
mireader.Read();
id_contacto = (System.UInt32) mireader["id_contacto"];
txtcontacto.Text=(string) mireader["nombre_contacto"];
txtdire.Text=(string) mireader["direccion_contacto"];
txttel.Text=(string) mireader["telefono_contacto"];
txtmail.Text=(string) mireader["email_contacto"];
}
}
17 marzo 2006
C# + Gtk# + Glade + Mysql
Esta pantalla es ejecutandose en Windows
Esta otra pantalla es ejecutandose en Linux
Proyecto Mono en México
Enlaces de interes:
http://www.monohispano.org (en español)
http://www.monohispano.es (en español)
http://www.go-mono.org (en ingles)