Etiqueta: VB.NET

Temas relacionados con Visual Basic para .NET Framework

  • Asignar el foco a un control al cargar una página web aspx (ampliación y recapitulación)

    Pues eso… que lo de "ampliación" es por no poner "revisited" o algo similar que eso ya está muy visto, jeje y lo de "recapitulación" por el chasco/descubrimiento/formas diferentes de funcionar con el que me he encontrado al hacer pruebas en VB y en C#, ya verás, ya…

    Pero en realidad esto es una aclaración o más bien un añadido (o ampliación) del otro artículo que publiqué el pasado 11 de octubre sobre este mismo tema, es decir, cómo asignar el foco a un control al cargar una página web aspx, en ese caso el código era con Visual Basic .NET pero lo importante no era el código si no lo explicado, es decir la forma de conseguir eso que indica el título.

    La aclaración es porque en ese ejemplo el código y el diseño está todo en un mismo fichero (archivo) en lugar de tener el código por un lado y el diseño por otro, que es como el Visual Studio se empeña que lo hagamos, aunque en mi caso particular me gusta más (o prefiero) tener todo junto, ya que así es más fácil de actualizar la página en concreto, al menos para mí, que todo puede ser que a tí te venga mejor compilar el código y publicarlo cada vez que hagas una modificación por pequeña que sea… ¡hay gustos para todo! 😉

     

    Vamos a lo que vamos.

    Si utilizas el código por separado del diseño de la página web entonces no es necesario asignar un valor true a la propiedad AutoEventWireup, ese valor verdadero sólo debes asignarlo si el código a usar está "incrustado" en la página web ASPX y no en un fichero separado (el cual hay que compilar y publicar en el sitio web).

     

    La forma de indicar si tienes el código "incrustado" o por separado es usando (lo que se llama "code behind"), esto lo puedes indicar al crear un nuevo fichero en el proyecto web tal como puedes ver en la figura 1 en la que he resaltado la parte que le indica a Visual Studio si quieres usar el código en un fichero separado o no (en este ejemplo SI se usa por separado).

    orden_tabulacion_fig1
    Figura 1. Indicar si queremos el código por separado o no

     

    Esto creará dos ficheros uno con la extensión .aspx (el diseño de la página web) y otro con la extensión del lenguaje usado, en este ejemplo al indicar que el código es de C# la extensión del fichero de código es: .aspx.cs.

    En este caso, el código de "enfoque" del control que queremos que sea el primero en recibir el foco lo pondremos dentro del evento Page_Load tal como podemos ver en los dos listados (el del diseñador y el código).
    (Ver el comentario de la nota).

     

    Listado 1 (el código del diseñador .aspx):

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Default3 - con el código por separado (en C#)</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:TextBox ID="TextBox1" runat="server">uno</asp:TextBox><br />
            <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
            <asp:TextBox ID="TextBox2" runat="server">dos</asp:TextBox><br />
            <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
            <asp:TextBox ID="TextBox3" runat="server">tres</asp:TextBox><br />
            <asp:Button ID="Button1" runat="server" Text="Button" />    
        </div>
        </form>
    </body>
    </html>

     

    Listado 2 (el código de C# .aspx.cs):

     

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class Default3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.TextBox1.Focus();
        }
    

     

     

    Nota:

    Es curioso, pero al hacer la prueba con C# para "demostrar" todo esto que estoy explicando, si no uso un valor verdadero (true) en la propiedad AutoEventWireup de la página de C# no se ejecuta ese código del evento Page_Load, sin embargo (de ahí lo de curioso) en el código de Visual Basic da igual el valor que tenga esa propiedad… ¡jum!

     

     

    Conclusión:

    Que no tengo ni idea de por qué pasa esto con una página de C#… así que… sigue usando AutoEventWireup = "true" y así seguro que siempre te funciona…

    Como te he dicho antes (en la nota) en Visual Basic .NET si va bien, uses true o false en AutoEventWireup, eso sí, siempre que el código esté por separado, si el código está en la misma página, si hay que indicar el valor true.

    En cualquier caso, lo cierto es que al añadir la página de C# el valor de la propiedad AutoEventWireup tiene el valor true, mientras que en Visual Basic es false.

    Todo esto (no solo que el valor sea verdadero/falso) es otra demostración de que a los de Visual Basic nos tratan de forma diferente…

    En fin…

     

    Espero que te sea de utilidad.

     

    Nos vemos.

    Guillermo

    …

  • Saber si navegamos en un móvil

    Pues eso… que estoy haciendo pruebas para saber si estoy usando el código de una página Web en un móvil o no… y buscando en mi sitio me encontré con este truco de la sección de HTML:
    1.- Detectar el navegador

    No es el navegador lo que quiero detectar, pero sí me sirve usar el mismo "informador", es decir navigator.userAgent.

    Por medio de esa propiedad podemos averiguar muchas cosas, algunas más enrevesadas que otras, y para el caso que quiero probar me sirve… aunque no al 100% ya que en realidad la comprobación que hago no es para saber si estoy usando el código en un dispositivo móvil si no en ciertos "modelos" de dispositivos móviles.

    En mi caso compruebo los siguientes: Android, iPhone, iPod, iPad, BlackBerry y Symbian.

    El código a usar sería algo así en JavaScript:

     

    <script type="text/javascript">
    
        var uAg = navigator.userAgent.toLowerCase();
        var isMobile = !!uAg.match(/android|iphone|ipad|ipod|blackberry|symbianos/i);
    
        if (isMobile)
            document.write("navegando desde un dispositivo móvil");
    
    </script>

     

    Como puedes ver en el código se comprueban varias cadenas que suelen (o pueden) aparecer en el valor devuelto por el navegador, y esa comprobación se hace por medio de una expresión regular, sabiendo esto, si necesitas añadir más "valores" a esa comprobación, por ejemplo, para saber si es un Nokia simplemente tendrías que poner antes del "/i" el separador y la cadena a añadir en minúsculas "|nokia", haciendo eso, la cadena de comprobación quedaría de esta forma:

     

    var isMobile = !!uAg.match(/android|iphone|ipad|ipod|blackberry|symbianos|nokia/i);

     

    Nota:

    Si a alguien se le ocurre que comprobando si está la palabra "mobile" en la cadena devuelta por navigator.userAgent, decirle que a lo mejor antes era así y puede que en muchos de los navegadores siga siendo así, pero da la casualidad que en el navegador Opera Mini que tengo en mi Samsung Galaxy S no aparece la palabra "mobile" por ningún sitio, así que… a mí no me vale.

     

    Y si quieres hacer esa misma comprobación usando Visual Basic para .NET, puedes hacerlo de esta forma:

     

    <%
    
    Dim uAg As String = Request.ServerVariables("HTTP_USER_AGENT")
    Dim regEx As New Regex("android|iphone|ipad|ipod|blackberry|symbianos", RegexOptions.IgnoreCase)
    Dim isMobile As Boolean = regEx.IsMatch(uAg)
        
    If isMobile Then
        Response.Write("navegando desde un dispositivo móvil")
    End If
    
    %>

     

    Esto mismo en C# puedes hacerlo, pero en la página ASPX tendrías que indicar que estás usando código de C# y hacer una importación del espacio de nombres System.Text.RegularExpresions:

     

    <%@ Page Language="C#" %> 
    <%@ Import Namespace="System.Text.RegularExpressions" %>

     

    Y el código para comprobar si estamos usando el navegador en un dispositivo móvil en C# será este:

     

    <%
    string uAg = Request.ServerVariables["HTTP_USER_AGENT"];
    Regex regEx = new Regex(@"android|iphone|ipad|ipod|blackberry|symbianos", RegexOptions.IgnoreCase);
    bool isMobile = regEx.IsMatch(uAg);
    
    if(isMobile)
        Response.Write("navegando desde un dispositivo móvil");
    
    %>

     

    Nos vemos.

    Guillermo

    …

  • [Como.NET] Saber el elemento de un Listview al hacer doble click

    Pues eso… en un programa que estoy haciendo necesitaba lanzar (producir) un evento si el usuario hacía doble clic (doble pulsación con el ratón/mouse) en un elemento de un Listview y busqué en mi sitio cómo hacerlo, pero… ¡no lo encontré! así que… aquí te pongo el código de cómo hacerlo por si alguna vez te surge esta misma tarea.

    Como viene siendo costumbre, el código te lo muestro tanto para Visual Basic como para C# y en cuanto a las versiones, creo que este código sirve para cualquier versión (tanto de VB como de C#) siempre que sea para punto net (.NET Framework).

     

    Comentarte que:

    DatoSeleccionado es un evento que yo he definido en el formulario y que lo intercepta otra parte de mi código.

    lvDatos es un control de tipo ListView.

     

     

    Visual Basic .NET

    Private Sub lvDatos_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles lvDatos.MouseDoubleClick
        ' Al hacer doble click en un elemento del listview
        If lvDatos.SelectedItems.Count > 0 Then
            Dim lv As ListViewItem = lvDatos.SelectedItems(0)
            RaiseEvent DatoSeleccionado(lv.Text)
        End If
    End Sub

     

     

    C#

    private void lvDatos_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) {
        // Al hacer doble click en un elemento del listview
        if( lvDatos.SelectedItems.Count > 0 ){
            ListViewItem lv = lvDatos.SelectedItems[0];
            if( DatoSeleccionado != null ) DatoSeleccionado(lv.Text);
        }
    }

     

     

    Espero que te sea de utilidad.

     

    Nos vemos.

    Guillermo

    P.S.

    El código de C# lo he convertido a partir del código de Visual Basic usando mi utilidad gsConvertirCodigo.exe  (y no lo he comprobado, pero debería funcionar ¡seguro!).

    Tanto el código de Visual Basic como el de C# está coloreado usando mi utilidad gsColorearCodigo.exe.

    …