Archivo

Archive for the ‘.NET’ Category

2do Concurso Nacional de Diseño Industrial de Genomma Lab Internacional

noviembre 9, 2010 Deja un comentario

Aquí les comparto este concurso para la gente de diseño, si les interesa abajo esta la liga del sitio oficial para mayor información.

concurso_diseño

Genomma Lab Internacional S.A.B. de C.V. convoca a la Creatividad, Innovación, y Originalidad de Estudiantes Universitarios al diseñar un envase para shampoo en tres distintas capacidades. Pon en práctica tus conocimientos, demuéstranos tu imaginación y preséntanos tus propuestas.

Bases del concurso:

  • Participan estudiantes de 18 años en adelante que cursen las carreras de Diseño Industrial, Diseño Gráfico, Arquitectura y carreras afines.
  • La inscripción de proyectos no tiene ningún costo.
  • Las propuestas se recibirán en: Edificio Corporativo Zentrum piso 21, Av. Santa Fe no. 495, Col. Santa Fe Cruz Manca, C.P. 05349, México, D.F.
  • La fecha límite de inscripción es el 12 de noviembre del 2010 a las 17 horas.
  • La participación es de manera individual.
  • El participante acepta al momento de enviar su propuesta la cesión de los derechos patrimoniales de la obra a Genomma Lab Internacional, S.A.B. de C.V.

Liga del concurso http://ht.ly/30qGg

Etiquetas de Technorati: ,,,,
Anuncios
Categorías:.NET

[Silverlight] Issue al extender algún control, mis controles dentro de este se generan nulos. Silverlight 3 y 4

mayo 1, 2010 1 comentario

Buenas,

Les platico de que va esto, imaginen que hacen una aplicación en donde tendrán un UserControl contenedor de otros Controles, como si fuera un Grid, StackPanel, etc. pero propio, es decir;  que nosotros lo creamos con estilo, funcionalidad y forma.

Primero creamos nuestro control, agregamos un nuevo UserControl al que llamaremos ContenedorPrincipal con el siguiente código XAML y cs.

XAML.

<Grid>
        <Rectangle Fill="Green" StrokeThickness="0" 
                   RadiusX="5"
                   RadiusY="5"  Margin="0" 
                   Canvas.ZIndex="-1"/>
        <Grid Margin="0">
            <Grid >
                <TextBlock x:Name="mensaje" Text="Mensaje" 
                           TextWrapping="Wrap" 
                           FontWeight="Bold" 
                           Foreground="White" Margin="0,2,0,0"                            
                           TextAlignment="Right" 
                           VerticalAlignment="Top" 
                           HorizontalAlignment="Center"                      >
                </TextBlock>
            </Grid>
            <Grid Margin="0,20,0,0">
                <StackPanel Margin="5,2" x:Name="contenedor" 
                            Canvas.ZIndex="2" />
                <Rectangle StrokeThickness="0" RadiusX="5" 
                           RadiusY="5" Margin="2" 
                           Fill="White" />
            </Grid>
        </Grid>
    </Grid>

Code Behind .cs

public string Texto
       {
           get { return mensaje.Text; }
           set { mensaje.Text = value; }
       }

       public StackPanel ControlHijo
       {
           get 
           {
               return contenedor.Children[0] as StackPanel;
           }
           set
           {
               contenedor.Children.Clear();
               contenedor.Children.Add(value);
           }
       }

Y nuestro control se ve así:

imageYa con el control, pensamos en reutilizarlo y dentro de el colocar todos los controles que necesitemos, de cualquier tipo, veamos como lo usariamos en una pagina xaml. Esto se haría así:

Agregamos la referencia del ensamblado de nuestro proyecto en el XAML:

xmlns:t="clr-namespace:IssueSilverlight"

luego dentro del Grid agregamos el control así:

        
<t:ContenedorPrincipal Texto="Mensaje del Contenedor Principal">
    <t:ContenedorPrincipal.ControlHijo>
        <StackPanel>
            <Button x:Name="botonPrueba" Content="Hola Mundo" 
                    Margin="5"
                        Width="100"/>
        </StackPanel>
    </t:ContenedorPrincipal.ControlHijo>
</t:ContenedorPrincipal>

Hasta este momento todo bien, si al boton que agregamos dentro del stackPanel le agregamos un evento como el Loaded, Click, etc, vean lo que sucede. Hacemos la prueba con el Loaded

private void botonPrueba_Loaded(object sender, RoutedEventArgs e)
{
    botonPrueba.Content = "nuevo mensaje";
}

Vean lo que sucede al correr la aplicación:

image

Me dice que mi botonPrueba no se ha creado y que es nulo :S, alguien me puede decir porque, si se supone que es su mismo evento Loaded. Por un momento pensé que era cosa de como se generan los controles en Silverlight, que primero se crea el Control Padre y por ultimo los hijos, pero NO, esto esta mal.

Ustedes que harían si les pasa esto, seguramente buscar en google, no?,pero que buscarían: “Object referece not set to an instance of an object”, no verdad, la verdad es que no tenemos muchas herramientas para buscar como resolver esto.

Bueno ps aquí mi solución, por si les pasa esto. Sin ser experto en la materia, les puedo decir que al parecer el problema es con el código XAML, al parecer no permite crear instancias de controles dentro de un contenedor como el que creamos, es decir; para el xaml nuestro control botonPrueba realmente no existe, esto al parecer por el x:Name, que aunque no nos marca error sucede. Es más si hacen esto en WPF les marca un error jajaja. “Qué cosas no?”

Entonces mi solución es, agregar al proyecto un archivo de código y crear nuestro control a patin, en puro code behind, claro nuestra clase debe heredar de UserControl e implementar una interface de ISupportInitialize, solo para Silverlight 4 porcierto jaja.

Código de mi control sin archivo .xaml

public class ContenedorCodeBehind : UserControl, ISupportInitialize
{
    private TextBlock mensaje;

    private StackPanel contenedor;

    public void BeginInit()
    {
        Grid gridPrincipal = new Grid();

        //Rectangulo
        Rectangle rectangle = new Rectangle();
        rectangle.Fill = new SolidColorBrush(Colors.Green);            
        rectangle.RadiusX = 5;
        rectangle.RadiusY = 5;
        Canvas.SetZIndex(rectangle, -1);            
        gridPrincipal.Children.Add(rectangle);

        //Grid que deberia Ser DockPanel
        Grid dockPanel = new Grid();

        Grid grid1 = new Grid();

        #region TextBlock

        //TextBlock
        mensaje = new TextBlock();
        mensaje.Text = "Mensaje";
        mensaje.TextWrapping = System.Windows.TextWrapping.Wrap;
        mensaje.FontWeight = FontWeights.Bold;
        mensaje.Foreground = new SolidColorBrush(Colors.White);
        mensaje.Margin = new Thickness(0, 2, 0, 0);
        mensaje.TextAlignment = TextAlignment.Right;
        mensaje.RenderTransformOrigin = new Point(0, 0);
        mensaje.HorizontalAlignment = HorizontalAlignment.Center;
        mensaje.VerticalAlignment = VerticalAlignment.Top;

        #endregion TextBlock

        grid1.Children.Add(mensaje);
        dockPanel.Children.Add(grid1);


        Grid grid2 = new Grid();
        grid2.Margin = new Thickness(0, 20, 0, 0);
        contenedor = new StackPanel();
        contenedor.Margin = new Thickness(5, 2, 5, 2);
        Canvas.SetZIndex(contenedor, 2);
        grid2.Children.Add(contenedor);


        Rectangle rec = new Rectangle();
        rec.StrokeThickness = 0;
        rec.RadiusX = 5;
        rec.RadiusY = 5;
        rec.Margin = new Thickness(2);

        rec.Fill = new SolidColorBrush(Colors.White);            

        grid2.Children.Add(rec);
        dockPanel.Children.Add(grid2);
        gridPrincipal.Children.Add(dockPanel);

        Content = gridPrincipal;
    }

    public void EndInit()
    {
        //throw new NotImplementedException();
    }

    public StackPanel ControlHijo
    {
        get
        {
            return contenedor.Children[0] as StackPanel;
        }

        set
        {
            contenedor.Children.Clear();
            contenedor.Children.Add(value);
        }
    }

    public string Texto
    {
        get
        {
            return this.mensaje.Text;
        }
        set
        {
            this.mensaje.Text = value;
        }
    }
    
    
}

Si se dan cuenta es el mismo control solo que sin el archivo .XAML. Ahora lo agregamos a nuestra pagina como el anterior y comentamos el código del otro control e incluso agregamos el mismo botonPrueba.

<Grid x:Name="LayoutRoot" Background="White">
    <t:ContenedorCodeBehind Texto="Control sin archivo .xaml">
        <t:ContenedorCodeBehind.ControlHijo>
            <StackPanel>
                <Button x:Name="botonPrueba" Content="Hola Mundo"
                        Margin="5" Loaded="botonPrueba_Loaded"
                    Width="100"/>
            </StackPanel>
        </t:ContenedorCodeBehind.ControlHijo>
    </t:ContenedorCodeBehind>
    <!--<t:ContenedorPrincipal Texto="Mensaje del Contenedor Principal">
        <t:ContenedorPrincipal.ControlHijo>
    <StackPanel>
        <Button x:Name="botonPrueba" Content="Hola Mundo" 
                Margin="5" Loaded="botonPrueba_Loaded"
                    Width="100"/>
    </StackPanel>
</t:ContenedorPrincipal.ControlHijo>
    </t:ContenedorPrincipal>-->
</Grid>

Y si ahora ejecutamos la aplicación… Sorpresa!!!! falla de nuevo jajajaja, naaa ya todo funciona correctamente :D, y ya podemos reutilizar nuestro control contenedor. Eso me pasa por querer hacer tantas cosas desde xaml a patín, mejor usar Expression, aunque este error pasa igual si lo usan :P. Para que vena que es verdad un video con los dos controles y el código fuente.

Video.

Proyecto.

image

Que les sea leve el día!!!

Categorías:.NET

Red Bull Street Style World Final 2010 Action Clip

Categorías:.NET

[Silverlight 4] Cómo correr Silverlight 4 en Visual Studio 2010 RC

marzo 5, 2010 3 comentarios

Buenas,

Actualmente trabajo en un proyecto con Silverlight 3, en esta versión no hay soporte para mostrar HTML, porque lo que tengo que hacer una serie de trucos con javascript para poder mostrar el HTML. Como ya sabrán resulta que la versión de Silverlight 4 esta a punto de ser liberada, por lo que hay que hacer pruebas porque seguro cuando salga a producción será en esta versión.

Mi problema es que Silveright 4 solo corre en VS 2010 (según me dijeron), por lo que ya descargue e instale Visual Studio 2010 RC, entonces quise instalar Silverlight 4 para hacer mis pruebas pero resulta que no lo puedo instalar porque VS 2010 ya es RC y Microsoft aun no libera la versión de los tools para el RC. #FAIL.

Aquí un truco de que podemos hacer para hacer pruebas en lo que estos productos se libera.

1. cuando tengamos en pantalla este mensaje:

image 

Antes de que cerremos, nos dirigimos a la unidad principal de nuestra maquina, en este caso la unidad C:\.

2. Abrir el archivo ParameterInfo.xml que se encuentra en la carpeta C:\1eb31413031af402db9ce97a1b69bc, ya que lo abrimos vamos a borrar las líneas 13 a 41.

Este es el texto que se debe borrar:

<BlockIf DisplayText="Visual Studio 2010 Beta 2 or Visual Web Developer Express 2010 Beta 2 that matches the language version of Silverlight Tools 4 must be installed before installation of Silverlight Tools can continue.  Silverlight Tools is available in other languages at &lt;A HREF=&quot;http://go.microsoft.com/fwlink/?LinkId=177432&quot;&gt;http://go.microsoft.com/fwlink/?LinkId=177432&lt;/A&gt;.">
  <Not>
    <Or>
      <Equals LeftHandSide="10.0.21006" BoolWhenNonExistent="false">
        <RegKeyValue Location="HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS\BuildNumber\1033" />
      </Equals>
      <Exists>
        <RegKey Location="HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Setup\Microsoft Visual Web Developer 2010 Express Beta 2 - enu" />
      </Exists>
    </Or>
  </Not>
</BlockIf>
<BlockIf DisplayText="The Visual Web Developer feature for Visual Studio 2010 Beta 2 must be installed before installation can continue.">
  <Not>
    <Or>
      <And>
        <Exists>
          <RegKey Location="HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\InstalledProducts\Visual Web Developer" />
        </Exists>
        <Exists>
          <RegKey Location="HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{349C5850-65DF-11DA-9384-00065B846F21}" />
        </Exists>
      </And>
      <Exists>
        <RegKey Location="HKLM\Software\Microsoft\VWDExpress\10.0\Packages\{349C5850-65DF-11DA-9384-00065B846F21}" />
      </Exists>
    </Or>
  </Not>
</BlockIf>

3. Luego ejecutamos el archivo SPInstaller.exe. Como se pueden dar cuenta en la imagen si se pude instalar aunque dice Beta 2 😛

image

4. Por ultimo vamos a actualizar unos datos en el registro de Windows en la siguiente ruta:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\DesignerPlatforms\Silverlight

y cambiamos el valor de SilverlightHost  de v3.0 a v4.0

Y listo ya podemos trabajar con Silverlight 4 en Visual Studio 2010 RC 😀

image

Espero que les sea de utilidad. Saludos!!!

Etiquetas de Technorati: ,,
Categorías:.NET

[ASP.NET] Validar un Dropdownlist dentro de un UpdatePanel

agosto 10, 2009 2 comentarios

Este caso se da mucho cuando tenemos algo como el siguiente formulario:

image

En donde el primer ddl (dropdownlist) se llena con un origen de datos (sqldatasource, objectdatasource, etc) y según el país que seleccione se llena el estado, esto dentro de un UpdatePanel para que solo se refresque estos controles de nuestra página.

Aquí tenemos que validar que el usuario seleccione una opción que no sea la predeterminada, para esto existen varias maneras de hacerlo, aquí un post de como hacer esto:

http://geeks.ms/blogs/rduarte/archive/2008/10/19/validar-dropdownlist-con-requiredfieldvalidator-y-customvalidator.aspx

Solo que con alguna de estas opciones dentro del UpdatePanel no funciona, ¿por qué?, la verdad no lo sé con exactitud, por eso les ofrezco esta otra solución, yo valido los ddl con un CompareValidator de la siguiente manera:

 

                            
<asp:DropDownList ID="ddlPais" runat="server" Width ="250px" 
                  AutoPostBack="True" DataTextField="Nombre" 
                  DataValueField="Id" AppendDataBoundItems="True" >                                     
</asp:DropDownList>
<asp:CompareValidator ID="cvPais" runat="server" 
            ControlToValidate="ddlPais" Display="Dynamic" 
            Text="<strong>*</strong>" SetFocusOnError="true" 
            Type="Integer" Operator="GreaterThan" 
            ValueToCompare="0" ValidationGroup="valPaso1"></asp:CompareValidator>
                   

Y lleno los siguientes ddl en su respectivo evento DataBound para el valor por Default, y en el evento change lleno los datos correspondientes a la selección del ddl anterior:

 

Protected Sub ddlPais_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlPais.DataBound
    Me.ddlPais.Items.Insert(0, New ListItem("--Seleccione un País--", 0))
End Sub

Protected Sub ddlPais_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlPais.SelectedIndexChanged
    'Aquí llenamos el ddl estado con el valor seleccionado del ddlPais
End Sub

Espero que esto les sea de utilidad.

Saludos.

Categorías:.NET

[ASP.NET] Ejecutando código JavaScripts desde HTML ó desde Code-Behind

julio 17, 2009 3 comentarios

Creo que la mayoría sabemos que en el desarrollo Web siempre hacemos uso de los scripts y creo que todos hemos tirado mínimo una función de Javascript así que este post trata de como trabajar con estos script en ASP.NET.

1.- Escribiendo Javascript desde el HTML y llamándolo desde el Code-Behind.

Código HTML

<script type="text/javascript" >
    function validarTextbox(){
        if (document.forms[0].txtNombre.value == "") {
            alert('El Cuadro de texto no puede estar vacio');
            return false;
        }
        return false;
    }
</script>

Llamándolo desde el Code-Behind

protected void Page_Load(object sender, EventArgs e)
{
    btnAceptar.Attributes.Add("onclick", "javascript:return validarTextbox();");
}

2. Escribir y llamar una función Javascript desde el Code-Behind

protected void Page_Load(object sender, EventArgs e)
{
    //cadena que contiene el script a ejecutar
    string stringJavascript;
    stringJavascript = "<script language=\"javascript\"> function poponload(){\n";
    stringJavascript += "testwindow = window.open(\"demo.htm\",\"Window\");\n";
    stringJavascript += "testwindow.moveTo(0,0);\n";
    stringJavascript += "return false;}";
    stringJavascript += "</script>";
    //registramos el script
    ClientScript.RegisterStartupScript(this.GetType(), "strJavascript", stringJavascript);
    //lo asignamos al evento del boton
    btnAceptar.Attributes.Add("onclick", "return poponload()");
}

3.- Escribir Javascript desde el Code-behind y llamarlo desde HTML

Código en el lado del Servidor

protected void Page_Load(object sender, EventArgs e)
{
    string jscript = string.Empty;
    jscript = "<script language=\"javascript\">function Mensaje(){alert" +
        "(\"Client Function in javascript is call\")}</script>";
    ClientScript.RegisterStartupScript(this.GetType(), "sJscript", jscript);
}

Llamándolo desde HTML

<a onclick="Mensaje();">
    <asp:Label id="Label1" runat="server" Width="281px" ForeColor="#8080FF">
        Clic para llamar a la función del Code-Behind
    </asp:Label>
</a>

4. RegisterClientScriptBlock

Esto lo podemos usar si es que no necesitamos que se ejecute una función que creamos, sino solo una parte de un script, aquí el como hacerlo:

Si queremos mostrar una alerta podemos hacer lo siguiente, en el HTML escribimos:

  
<script language="javascript">
    function mensaje() {
        alert("funcion llamada desde el Code-Behind");
    }
</script>

y si lo queremos ejecutar desde el Code-Behind según lo que escribí arriba sería así:

 

protected void Button1_Click(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript
            (this.GetType(), "jsKey", "javascript:mensaje();", true);
    }

Pero si se dan cuenta aquí solo es un código Javascript relativamente corto, entonces aquí es donde podemos usar RegisterClientScriptBlock y para ello lo hacemos así:

protected void Button2_Click(object sender, EventArgs e)
{
    ClientScript.RegisterClientScriptBlock
        (GetType(), "javascript", "<script>alert(" + 
        "\"Este es un Bloque de código javascript \")</script>");
}

Actualización: 2 horas más tarde 😛

5. Registrar el script en el evento Load en el Header de nuestra página:

por lo regular cuando agregamos un script solo lo arrastramos desde el explorador de soluciones al Header de nuestra página y nos genera código HTML más o menos así:

<script src="js/mensaje.js" type="text/javascript"></script>

Pero si se han dado cuenta la etiqueta Head en asp.net tiene un atributo runan=”server”, lo que significa que podemos manipularlo desde el Code-Behind lo que nos permite registrar un script desde el lado del servidor, aquí el como hacerlo, primero creamos una función que se llama RegistrarScript:

private void RegistrarScript()
{
    HtmlGenericControl script = new HtmlGenericControl("script");
    script.Attributes.Add("type", "text/javascript");
    script.Attributes.Add("src", "js/mensaje.js");
    Header.Controls.Add(script);
}

Aquí nos indica que en nuestro proyecto tenemos un Javascript llamada “mensaje.js” dentro de una carpeta llamada js. Este método lo ponemos dentro del evento load de nuestra página:

protected void Page_Load(object sender, EventArgs e)
{
    RegistrarScript();
    Button1.Attributes.Add("onclick", "javascript:return mensaje()");
}

Y de esta manera podemos registrar también nuestros script, e incluso las hojas de estilo.

Saludos.

Etiquetas de Technorati: ,,

Categorías:.NET

[IE8] IE8 disponible en 20 idiomas más

El día de hoy el equipo de IE8 anuncio la disponibilidad de Internet Explorer 8 en 20 idiomas más, lo que quiere decir que actualmente IE8 esta diponible en un total de 63 idiomas :D.

Si aun no tienes Internet Explorer 8 visita esta página para poder descargarlo en tu idioma:

http://www.microsoft.com/windows/internet-explorer/worldwide-sites.aspx

Aquí la lista de los nuevos idiomas:

Language

Code

Windows
Vista x86

Windows
XP x86

Albanian

SQI

Yes

Yes

Assamese

ASM

Yes

Basque

EUQ

Yes

Yes

Bengali (Bangladesh)

BGD

Yes

Bengali (India)

BNG

Yes

Coming soon

Gujarati

GUJ

Yes

Yes

Indonesian

IND

Yes

Yes

Kannada

KDI

Yes

Coming soon

Kazakh

KKZ

Yes

Yes

Konkani

KNK

Yes

Yes

Kyrgyz

KYR

Yes

Malay (Brunei Darussalam)

MSB

Yes

Malay (Malaysia)

MSL

Yes

Yes

Malayalam

MYM

Yes

Coming soon

Marathi

MAR

Yes

Yes

Oriya

ORI

Yes

Punjabi

PAN

Yes

Coming soon

Tamil

TAM

Yes

Yes

Telugu

TEL

Yes

Coming soon

Uzbek (Latin)

UZB

Yes

Saludos!!!

Etiquetas de Technorati: ,
Categorías:.NET, IE8