En windows forms hay una clase especial para mostrar ayuda desde archivos chm para nuestra aplicación esta clase es System.Windows.Forms.Help y es una clase estatica muy fácil de usar basta llamar a uno de los métodos ShowHelp con los parámetros adecuados es decir la dirección del archivo y opcionalmente una dirección de navegación que nos mostrara la ayuda en la posición adecuada.
Para mostrar la ayuda en su inicio:
Help.ShowHelp(this, "Desktop.chm");
Y para mostrarla en la pestaña de busqueda (sin palabra clave indicada):
Help.ShowHelp(this, "Desktop.chm", HelpNavigator.Find, "");
jueves, 7 de febrero de 2013
jueves, 31 de enero de 2013
Usando c# en xslt
En .Net el soporte de xslt se limita a la version 1 y no parece que esto vaya a cambiar pronto asi que estamos muy limitados en cuanto a lo que se puede hacer: hay pocas funciones y no se pueden declarar funciones nuevas.
Afortunadamente Microsoft incluyo soporte para crear funciones nuevas funciones en cualquier lenguaje de .Net esto es a través del elemento <msxsl:script />
En el ejemplo creamos la función Trim que no tiene equivalente en xslt (aunque normalize-space se parece)
Hay que recordar que esto solo se soporta en m$, si vas a usar tu xslt con otras aplicaciones no va a funcionar.
Para activarlo con la clase XslCompiledTransform se debe cargar el xslt con un objecto XsltSettings con la propiedad EnableScript en true:
Afortunadamente Microsoft incluyo soporte para crear funciones nuevas funciones en cualquier lenguaje de .Net esto es a través del elemento <msxsl:script />
En el ejemplo creamos la función Trim que no tiene equivalente en xslt (aunque normalize-space se parece)
Hay que recordar que esto solo se soporta en m$, si vas a usar tu xslt con otras aplicaciones no va a funcionar.
Para activarlo con la clase XslCompiledTransform se debe cargar el xslt con un objecto XsltSettings con la propiedad EnableScript en true:
XsltSettings xsltSettings = new XsltSettings();
xsltSettings.EnableScript = true;
XslCompiledTransform transform = new XslCompiledTransform(false);
transform.Load(styleSheet, xsltSettings, new XmlUrlResolver());
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
xmlns:user="urn:my-scripts"
>
<msxsl:script language="C#" implements-prefix="user">
<![CDATA[
public string Trim(string input) {
return input.Trim();
}
]]>
</msxsl:script>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<NewRoot>
<xsl:for-each select="OldValues/OldValue">
<NewValue>
<Id>
<xsl:value-of select="user:Trim(Id)"/>
</Id>
</NewValue>
</xsl:for-each>
</NewRoot>
</xsl:template>
</xsl:stylesheet>
domingo, 17 de junio de 2012
Delegados anonimos asincronos
El titulo lo dice todo aquí esta el ejemplo:
Func<bool> async = () => { return false; }; IAsyncResult res = async.BeginInvoke(null, null); async.EndInvoke(res);
Lo único que hay que resaltar es que en el ejemplo use una función que retorna un bool como se observa claramente pero se pueden usar las diferentes variantes de Func y Action para cambiar los parámetros y resultados.
sábado, 16 de junio de 2012
MochaHost un buen hosting para Asp.Net
Si buscan un buen hosting para Asp.Net permitanme recomendarles MochaHost.
Yo llevo un tiempo con este servicio contratado para varios sitios, todos hechos en Asp.Net y me parece muy buena alternativa, el servicio es muy económico y tiene varios puntos a su favor en primer lugar todo es ilimitado: sitios ilimitados, subdominios ilimitados, trafico ilimitado y hasta bases de datos ilimitadas de tamaño ilimitado, incluyendo Sql Server.
Otra cosa es que actualizan la versión de .Net en cuanto aparece una nueva así que puedes empezar a usar nuevas características sin esperar meses para la actualización, esto es algo que casi nadie tiene.
Además el servicio es bueno, casi no falla y el soporte técnico responde rápido, por supuesto no esta libre de problemas, pero bueno yo he usado diferentes hostings y este no tiene tantos problemas como otros que son mas caros y lo limitan a uno en prestaciones.
Bueno sin más les dejo el link a MochaHost:
MochaHost - ASP.NET/MS SQL Hosting from $2.48/month !
Yo llevo un tiempo con este servicio contratado para varios sitios, todos hechos en Asp.Net y me parece muy buena alternativa, el servicio es muy económico y tiene varios puntos a su favor en primer lugar todo es ilimitado: sitios ilimitados, subdominios ilimitados, trafico ilimitado y hasta bases de datos ilimitadas de tamaño ilimitado, incluyendo Sql Server.
Otra cosa es que actualizan la versión de .Net en cuanto aparece una nueva así que puedes empezar a usar nuevas características sin esperar meses para la actualización, esto es algo que casi nadie tiene.
Además el servicio es bueno, casi no falla y el soporte técnico responde rápido, por supuesto no esta libre de problemas, pero bueno yo he usado diferentes hostings y este no tiene tantos problemas como otros que son mas caros y lo limitan a uno en prestaciones.
Bueno sin más les dejo el link a MochaHost:
MochaHost - ASP.NET/MS SQL Hosting from $2.48/month !
domingo, 10 de junio de 2012
Usando dbus en .Net
Si programas para Linux una de las cosas que te serán muy útiles es usar dbus ya sea para implementar comunicación entre tus aplicaciones o para inspeccionar el estado del sistema.
En este ejemplo veremos como usar dbus para saber si el screensaver de gnome esta activo.
Usamos la dll dbus-sharp que se obtiene desde el git de mono, aquí esta la liga:
dbus-sharp en github
Yo use la ultima versión del repositorio no las descargas oficiales que son muy viejas.
Bueno lo mejor del proyecto es que te permite obtener la información con tipos de datos duros, nada de castear objects.
Lo primero que debes hacer es crear una interfaz que declare los miembros que exporta la clave de dbus que vas a usar por ejemplo para el screensaver en la siguiente pagina podemos ver los miembros exportados:
http://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html
Ahí podemos ver que tenemos un método y una señal (evento) para saber si el screensaver esta activo:
GetActive y ActiveChanged
Asi que nuestra interfaz declara los dos miembros un evento y una función:
Ahora usamos la interface en nuestro codigo, solo es necesario conectarse a dbus y obtener un objeto que implementa la interfaz desde la conexión, no es necesario ningún código para el objeto la dll se encarga de implementar la interfaz automáticamente, después solo resta usar los miembros:
Por supuesto también usar en Windows y otros sistemas operativos, aunque por supuesto dbus es mucho mas común en Linux
En este ejemplo veremos como usar dbus para saber si el screensaver de gnome esta activo.
Usamos la dll dbus-sharp que se obtiene desde el git de mono, aquí esta la liga:
dbus-sharp en github
Yo use la ultima versión del repositorio no las descargas oficiales que son muy viejas.
Bueno lo mejor del proyecto es que te permite obtener la información con tipos de datos duros, nada de castear objects.
Lo primero que debes hacer es crear una interfaz que declare los miembros que exporta la clave de dbus que vas a usar por ejemplo para el screensaver en la siguiente pagina podemos ver los miembros exportados:
http://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html
Ahí podemos ver que tenemos un método y una señal (evento) para saber si el screensaver esta activo:
GetActive y ActiveChanged
Asi que nuestra interfaz declara los dos miembros un evento y una función:
public delegate void ActiveChangedHandler(bool active); [Interface("org.gnome.ScreenSaver")] public interface IScreenSaver { event ActiveChangedHandler ActiveChanged; bool GetActive(); }Como podemos ver podemos declarar solo los miembros que necesitamos no es necesario declarar todos los miembros.
Ahora usamos la interface en nuestro codigo, solo es necesario conectarse a dbus y obtener un objeto que implementa la interfaz desde la conexión, no es necesario ningún código para el objeto la dll se encarga de implementar la interfaz automáticamente, después solo resta usar los miembros:
class Program { static Connection con = Bus.Session; static void Main(string[] args) { ObjectPath opath = new ObjectPath("/org/gnome/ScreenSaver"); IScreenSaver bus = con.GetObject<IScreenSaver> ("org.gnome.ScreenSaver", opath); for(int i = 0; i < 100; i++) { Console.WriteLine(bus.GetActive().ToString() + "\t" + i.ToString()); Thread.Sleep(1000); } } }Sencillisimo y muy útil!
Por supuesto también usar en Windows y otros sistemas operativos, aunque por supuesto dbus es mucho mas común en Linux
viernes, 27 de abril de 2012
Lista de articulos acerca de Script Sharp
Esta es una lista de artículos acerca de Script# disponibles en este blog:
Script# genera código para clases parciales marcadas como Imported
Tipos de proyecto de Script Sharp
Script sharp JavaScript o C#?
Script# genera código para clases parciales marcadas como Imported
Tipos de proyecto de Script Sharp
Script sharp JavaScript o C#?
viernes, 20 de abril de 2012
Script# genera código para clases parciales marcadas como Imported
Este es un error difícil de encontrarle solución así que les pongo aquí la solución.
El problema tenemos una clase parcial en Script# y la marcamos como Imported, Script# no deberia generar código para esta clase debido al atributo Imported sin embargo el código es generado, pues bien el problema es que no esta usando el atributo Imported.
Bien lo que hay que hacer es abrir el archivo .csproj del proyecto en notepad e ir a la lista de archivos incluidos en el proyecto buscamos el último archivo listado de los que conforman la clase parcial y en ese archivo es en el que se debe incluir el atributo Imported por lo cual lo añadimos en ese archivo y lo eliminamos del otro u otros que conformen la clase.
Después de esto el código se generara correctamente.
Mucho ojo no se debe modificar el archivo del proyecto en Notepad.
Suscribirse a:
Entradas (Atom)