# Vb.NET 2008 Duda con asignación de datos



## Moyano Jonathan (Jul 13, 2010)

Hola a todos , en mi desarrollo de aplicaciones para USB he tenido algunas complicaciones básicas sobre la programación y quería saber si me podrían brindar ayuda.
Mi problema es el siguiente:
Tengo una serie de *TextBox* en Visual Basic.NET 2008 que tienen que pasar el valor que introduce el usuario a variables dentro del programa, pero la dificultad se me presenta cuando 
quiero asignarle el valor me presenta una excepción con un error que dice lo siguiente:
*Error    1    La referencia a un miembro no compartido requiere una referencia de objeto.    C:\Documents and Settings\Flia. Moyano\Escritorio\ELECTRONICA\EJERCICIOS HID VB.net\EJERCICIO Nº 1 HID\Form1.vb    3    39    EJERCICIO Nº 1 HID*

acá la porción de código 

Private Const VendorID As Short = Vid_dispositivo.Text yo necesito que lo que el usuario ponga en el cuadro de texto ( que es un valor hexadecimal ) lo asigne a la variable VendorID.

Si alguien me puede dar una mano le estaré agradecido


----------



## lubeck (Jul 13, 2010)

> Private Const VendorID As Short = Vid_dispositivo.Text



mira lo intento... 

pero yo creo que el error esta en que lo declaras como cosntante...

ponle Private  VendorID As Short = Vid_dispositivo.

las constantes no pueden cambiar de valor....

espero sea eso...
saludos...


----------



## Moyano Jonathan (Jul 13, 2010)

mirá me sigue mostrando error por que me parece que el tipo de dato no concuerda :S
Private VendorID As Short = Convert.ToInt16(Val(VID_BOX.Text)) acá le cambio el tipo de dato ...pero me muestra un error que no me deja ejecutar el formulario ...

El tipo de datos del texbox es string ....y quiero asignar el valor de dicho texbox a l variable VendorID pero no me deja....


----------



## lubeck (Jul 13, 2010)

y asi nada mas...
Private VendorID As Short = Val(VID_BOX.Text)
te marca error????????

es que esta medio raro... no puedes subir la rutina completa??????


----------



## Moyano Jonathan (Jul 13, 2010)

es que este dato no afecta a otra parte de la rutina ..... VendorID tiene que ser del tipo short. Ahora VID_BOX entrega un string....ese string lo tendría que asignar a una variable del mismo tipo ...por ejemplo a...ahora tendríamos que cambiar el tipo string a short para que me acepte el dato VendorID.
Ahi es en donde se me está complicando :s


----------



## lubeck (Jul 13, 2010)

prueba esto

Private VendorID As Short = Val("&H" &  VID_BOX.Text)


----------



## Moyano Jonathan (Jul 13, 2010)

Me sigue marcando el mismo error....la verdad no se que es :S ya lo voy a seguir investigando pero me tiene atonito que algo tan simple me de este dolor de cabeza...pero ya lo vamos a solucionar es cuestión de tiempo....:S


----------



## Dr. Zoidberg (Jul 13, 2010)

Perdón: Cual es el error? Podés copiar y pegar lo que dice?


----------



## lubeck (Jul 13, 2010)

Es que no entiendo....

si pones msgbox (Val("&H" & "FF")) te va aponer 255

lo que no se es como y donde estas declarando la variable....

para mi ahi esta lo raro...

espero lo resuelvas....

saludos...


----------



## Dr. Zoidberg (Jul 13, 2010)

Ya sé! EL problema está en la forma en que estás declarando e inicializando la variable. El signo igual no puede ir donde lo has puesto, sino que el valor va a lado del nombre de la variable, que sería algo como:
Private *VendorID = CShort(VID_BOX.Text)* As Short
pero dudo mucho que el compilador lo acepte (?)

Por que no declarás en una linea e inicializás en otra?


----------



## Moyano Jonathan (Jul 13, 2010)

Pronto pongo mis resultados estoy haciendo unas pruebas más...sino me funciona pongo los errores que me vallan saliendo.


----------



## lubeck (Jul 13, 2010)

> Por que no declarás en una linea e inicializás en otra?



eso pense yo pero no entiendo que es lo que se pretende 

yo haria esto


```
Private VendorID As Short 
vendorID= Val("&H" & VID_BOX.Text)
```


----------



## Moyano Jonathan (Jul 13, 2010)

Bueno hasta ahora no pude hacerlo andar asi que pongo una explicación detallada de lo que se quiere:
1º - El programa es una ejemplo de los muchos de USB que he posteado pero con la diferencia que los parámetros como VID, PID, IN_BUFF, OUT_BUFF , se cargan mediante TexBox que están en el formulario.

2º - Las variables que se manejan son del tipo *short *con lo cuál los datos que se le deben asignar a dichas variables tienen que tener el mismo tipo.

3º - Pongo las variables en cuestion.

Dim VendorID As Short = &H1781 Acá está definido el ID del vendedor del producto USB.
Dim ProductID As Short = &H7D0  Acá está definido el ID del producto USB.


Dim BufferInSize As Short = 8 Acá está definido el tamaño del Buffer de entrada de datos.
 Dim BufferOutSize As Short = 8 Acá está definido el tamaño del Buffer de salida de datos.

4º - Las variables nombradas anteriormente están definidas con constantes, en mi programa se tienen que cargar desde los correspondientes TextBox que tienen asignados como muestra la siguiente figura:






5º - Luego de asignarle a cada TexBox un valor determinado pongo conectar dispositivo.

6º - Mi problema concretamente reside en como asignarle el valor del textBOX correspondiente a la variable que muestro en el punto 3.

7º - Hasta ahora los diferentes intentos que he hecho por asignarle los datos me han dado la siguiente ventana de error al ejecutar el programa:





Ahi es donde tengo el problema....no se como pasarle el valor a una variable del tipo *short *cuando el Texbox entrega un valor del tipo *string*

Ya he probado todas las formas que he encontrado en internet y las que me han proporcionado ustedes pero no he tenido exito. 

Voy a seguir investigando 

Les pongo el código del programa:

```
Public Class Form1

    Dim VendorID As Short = &H1781
    Dim ProductID As Short = &H7D0   'product and vendor IDs

    ' read and write buffers
    Dim BufferInSize As Short = 1 'Size of the data buffer coming IN to the PC
    Dim BufferOutSize As Short = 1    'Size of the data buffer going OUT from the PC
    Dim BufferIn(BufferInSize) As Byte          'Received data will be stored here - the first byte in the array is unused
    Dim BufferOut(BufferOutSize) As Byte    'Transmitted data is stored here - the first item in the array must be 0

    ' ****************************************************************
    ' when the form loads, connect to the HID controller - pass
    ' the form window handle so that you can receive notification
    ' events...
    '*****************************************************************
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        USB_ESTADO.BackColor = Color.Blue
    End Sub

    '*****************************************************************
    ' disconnect from the HID controller...
    '*****************************************************************
    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        DisconnectFromHID()
    End Sub

    '*****************************************************************
    ' a HID device has been plugged in...
    '*****************************************************************
    Public Sub OnPlugged(ByVal pHandle As Integer)
        If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then

            USB_ESTADO.BackColor = Color.Green
        End If
    End Sub

    '*****************************************************************
    ' a HID device has been unplugged...
    '*****************************************************************
    Public Sub OnUnplugged(ByVal pHandle As Integer)
        If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
            hidSetReadNotify(hidGetHandle(VendorID, ProductID), False)
            USB_ESTADO.BackColor = Color.Red
        End If
    End Sub

    '*****************************************************************
    ' controller changed notification - called
    ' after ALL HID devices are plugged or unplugged
    '*****************************************************************
    Public Sub OnChanged()
        ' get the handle of the device we are interested in, then set
        ' its read notify flag to true - this ensures you get a read
        ' notification message when there is some data to read...
        Dim pHandle As Integer
        pHandle = hidGetHandle(VendorID, ProductID)
        hidSetReadNotify(hidGetHandle(VendorID, ProductID), True)
    End Sub

    '*****************************************************************
    ' on read event...
    '*****************************************************************
    Public Sub OnRead(ByVal pHandle As Integer)
        ' read the data (don't forget, pass the whole array)...
        If hidRead(pHandle, BufferIn(0)) Then
            ' ** YOUR CODE HERE **
            ' first byte is the report ID, e.g. BufferIn(0)
            ' the other bytes are the data from the microcontroller...
        End If
    End Sub

    Private Sub CONECTAR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CONECTAR.Click
        ConnectToHID(Me)
    End Sub
End Class
```

Espero poder solucionarlo asi sigo con mis ejemplos sobre USB 

Un saludo !


----------



## lubeck (Jul 13, 2010)

Pues no entiendo muy bien

yo hago esto y me funciona

```
Public Class Form1
    Inherits System.Windows.Forms.Form


    Private jorge As Short
[B]    'crear un textbox
    'crear un label
    'crear un commandbottom[/B]

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        jorge = (Val(TextBox1.Text))
        label1.text=jorge
       ' en el textbox pongo &HFF

    End Sub
End Class
```

Ya ya..

es que no puedes asignarle el valor en el inicio....

prueba asignar el valor al cargar el formulario....

en el procedimiento load... me explico

asi mas o menos

```
Public Class Form1

    Dim VendorID As Short 
    Dim ProductID As Short = &H7D0   'product and vendor IDs

    ' read and write buffers
    Dim BufferInSize As Short = 1 'Size of the data buffer coming IN to the PC
    Dim BufferOutSize As Short = 1    'Size of the data buffer going OUT from the PC
    Dim BufferIn(BufferInSize) As Byte          'Received data will be stored here - the first byte in the array is unused
    Dim BufferOut(BufferOutSize) As Byte    'Transmitted data is stored here - the first item in the array must be 0

    ' ****************************************************************
    ' when the form loads, connect to the HID controller - pass
    ' the form window handle so that you can receive notification
    ' events...
    '*****************************************************************
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        USB_ESTADO.BackColor = Color.Blue
        [B]vendorID=val(vid_box.text)[/B]
    End Sub

    '*****************************************************************
    ' disconnect from the HID controller...
    '*****************************************************************
    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        DisconnectFromHID()
    End Sub

    '*****************************************************************
    ' a HID device has been plugged in...
    '*****************************************************************
    Public Sub OnPlugged(ByVal pHandle As Integer)
        If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then

            USB_ESTADO.BackColor = Color.Green
        End If
    End Sub

    '*****************************************************************
    ' a HID device has been unplugged...
    '*****************************************************************
    Public Sub OnUnplugged(ByVal pHandle As Integer)
        If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
            hidSetReadNotify(hidGetHandle(VendorID, ProductID), False)
            USB_ESTADO.BackColor = Color.Red
        End If
    End Sub

    '*****************************************************************
    ' controller changed notification - called
    ' after ALL HID devices are plugged or unplugged
    '*****************************************************************
    Public Sub OnChanged()
        ' get the handle of the device we are interested in, then set
        ' its read notify flag to true - this ensures you get a read
        ' notification message when there is some data to read...
        Dim pHandle As Integer
        pHandle = hidGetHandle(VendorID, ProductID)
        hidSetReadNotify(hidGetHandle(VendorID, ProductID), True)
    End Sub

    '*****************************************************************
    ' on read event...
    '*****************************************************************
    Public Sub OnRead(ByVal pHandle As Integer)
        ' read the data (don't forget, pass the whole array)...
        If hidRead(pHandle, BufferIn(0)) Then
            ' ** YOUR CODE HERE **
            ' first byte is the report ID, e.g. BufferIn(0)
            ' the other bytes are the data from the microcontroller...
        End If
    End Sub

    Private Sub CONECTAR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CONECTAR.Click
        ConnectToHID(Me)
    End Sub
End Class
```


----------



## Dr. Zoidberg (Jul 13, 2010)

El error es claro: Estas tratando de asignar algo que NO ES UN OBJETO a una REFERENCIA A OBJETO.
Como .NET usa autoboxing y autounboxing, y como no se vé donde está marcado el error poco mas puedo decirte, pero fijate la forma en la que estás asignando y cambiá eso: Declará en una línea y asigná en otra. Las cosas simples hay que mantenerlas simples, así que dejá de mezclar código con cosas raras.

Por otra parte, no podés inicializar las variables donde pretendés hacerlo, por que esa declaración e inicialización se van a ejecutar antes de que tengas disponibles los textbox para cargarles algo. Poné un botón o algo que al hacerle click te inicialice las variables declaradas previamente, por que si nó, no entiendo como vas a cargar los textbox, salvos que le pongas un string constante predefinido...pero para eso, hubieras cargado directamente con las constantes...


----------



## ByAxel (Jul 13, 2010)

Ciertamente; un par de cosas...
1ro: Se debe de esperar a que los controles se creen y muy a menudo cargar un valor a una variable desde un control se hace en el evento "Form1_Load" o en su defecto en el evento "Form1_Shown".
2do: Según la imagen de los TextBox no veo nada asignado, ocurre que no hay ningún argumento para convertir lo que genera un error. Así que mejor te recomiendo iniciar con unos valores por defecto y cargarlos en los textBox y cuando hacen clic en el botón, recién asignes el dato de los textbox a dichas variables; teniendo en cuenta que los TextBox tenga un argumento válido para la convención (en este caso solo acepte números)...


----------



## elbrujo (Jul 13, 2010)

Moyano Jonathan dijo:


> Hola a todos , en mi desarrollo de aplicaciones para USB he tenido algunas complicaciones básicas sobre la programación y quería saber si me podrían brindar ayuda.
> Mi problema es el siguiente:
> Tengo una serie de *TextBox* en Visual Basic.NET 2008 que tienen que pasar el valor que introduce el usuario a variables dentro del programa, pero la dificultad se me presenta cuando
> quiero asignarle el valor me presenta una excepción con un error que dice lo siguiente:
> ...



Estas queriendo definir una variable con un dato que no se cargo aun!

Defini la variable y luego de leer el text.box le asignas el nuevo valor...


----------



## Moyano Jonathan (Jul 13, 2010)

Ok voy a tener en cuenta lo que me dicen y voy a seguir haciendo las pruebas pertinentes
Muchas gracias , luego les comento !


----------



## Moyano Jonathan (Jul 14, 2010)

Bueno quiero decirles a todos que gracias a ustedes pude solucionar mi problema y mi aplicación ya corre como debe. Muchas gracias nuevamente por su tiempo y dedicación se lo agradezco mucho

bueno para todos acá les muestro la solución:


1º - El problema era debido a algo básico relacionado a la programación en general: No podemos asignarle a una variable declarada un valor nulo o que aún no se ha cargado, he aquí el error en si  
	

	
	
		
		

		
		
	


	




2º - Las variables *short*, si pueden tomar datos de un texbox aunque los mismo entreguen strings.

3º - Solución entonces : Al no poder cargar una variable con un valor aún no estipulado por el usuario, entonces nos ayudamos del evento TextChanged con esto elimanos este error y los datos se asignan siempre y cuando el evento ocurra; es decir cuando el usuario cargue elementos al TexBox.

Les muestro como se hace entonces.

Nosotros teniamos la siguiente variable entera de 16 bits con signo.
Dim VendorID As Short

luego le cargamos datos en cuanto el usuario dispare el evento de cambios en el texbox:

 Private Sub Vid_dispositivo_TextChanged(ByVal sender As System.Object, ByVal As System.EventArgs) Handles Vid_dispositivo.TextChanged
        VendorID = (Val(Vid_dispositivo.Text))
End Sub

y problema más que solucionado  
	

	
	
		
		

		
		
	


	







Espero que les sirva !


----------



## Zetthketin (Ago 10, 2010)

Tengo un problema parecido ojala puedan orientarme seguro que es sencillo para programadores,
mi problema es el siguiente
En mi maquina el programa funciona muy bien, hago el encapsulado  lo instalo en otra maquina y me sale el siguiente error: Error la conversión de la cadena "" en el tipo double no es valida.

dejo mi codigo que he estado moviendo todo el día y no encuentro que pueda ser 

dim x6, p1 as integer

 Private Sub Button25_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button25.Click  

         'p1 = (x6 + 1)
         'x6 = val(p1)
        Label9.Text = Val(Label9.Text + 1) ' val(p1)

    End Sub

  Private Sub Button24_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button24.Click

        If Val(Label9.Text) > 0 Then
            'p1 = Val(x6 - 1)
            'x6 = Val(p1)
            Label9.Text = Val(Label9.Text - 1) 'val(p1)
        Else
        End If

    End Sub

    Private Sub Button23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button23.Click

        'x6 = 0
        'p1 = Val(x6)
        Label9.Text = 0 'val(p1)

    End Sub

Son las dos versiones que he hecho el valor inicial de x6 es 0 cuando carga el form, 
y no se porque funciona en mi maquina de ambos modos y el otra maquina aparece el error y el programa se cierra, ojala me puedan ayudar en esta duda y gracias de antemano


----------



## lubeck (Ago 10, 2010)

> dim x6, p1 as integer



porque no le defines el tipo a x6

dim x6 as integer, p1 as integer????



> Label9.Text = Val(Label9.Text + 1) ' val(p1)


Label9.Text = Val(Label9.Text )+1 ' val(p1)



> Label9.Text = Val(Label9.Text - 1)


Label9.Text = Val(Label9.Text )-1



> 'x6 = Val(p1)


si p1 ya es numerico para que le pones val()????



> puerto.WriteLine(num23)


esto me queda como incognita?????? de donde sale????


----------



## Zetthketin (Ago 10, 2010)

lubeck dijo:


> porque no le defines el tipo a x6
> 
> dim x6 as integer, p1 as integer????
> 
> ...



Ya defini las variables como integer,  cambie tambien los parentesis y omiti el val pero aun me sale el error de conversion "" a cadena double es curioso que no tengo ninguna cadena double 

estoy manejando un display 7 segmentos a travez del puerto serie, de hay que uso la instrucción, todo el hardware me funciona perfecto (comunicandolo con un pic16f628a), pero he querido poner un label que muestre el numero que muestra el display y simplemente no lo he logrado no se que pasa 
cuenta bien ascendentemente pero cuando quiero disminuir aparece el problema o cuando aprieto el boton reset, 
no requiero nada mas que un label y tres botones, cuenta arriba, abajo y reset, si sabes de alguna pagina que tenga un ejemplo te lo agradecere infinitamente porque la verdad no se porque me aparece el error =S


----------



## lubeck (Ago 10, 2010)

prueba analizando este...
a mi me funciono espero que tengas proteus 7.7 sp2... si no nada mas analiza el codigo.... la verdad es que no se de alguna pagina yo batalle mucho.... no encontre nada completo y se me hizo mas facil diseñarlo yo...  lo hice en .net 2003 espero sean compatibles...

https://www.forosdeelectronica.com/f24/solo-ejemplos-picbasicpro-proteus-39938/#post331663


Saludos...


----------



## Meta (Ago 13, 2010)

Moyano.

Has la misma pregunta por aquí. En horas si veo que no lo haces lo haré cuando tenga tiempo.

http://social.msdn.microsoft.com/Forums/es-es/vbes/threads

Saludo.


----------



## lubeck (Ago 13, 2010)

> Has la misma pregunta por aquí. En horas si veo que no lo haces lo haré cuando tenga tiempo.



Hola Meta

Si no tienes mucho tiempo no lo hagas... Moyano ya soluciono su problema creo....

Buen Link... 

Saludos...


----------



## Moyano Jonathan (Ago 13, 2010)

@meta como estás, como dice el amigo @lubeck yo ya pude solucionar mi pequeño inconveniente...ahora estoy atascado en estudiar la dll nativa de windows HID.DLL que me tiene con la cabeza trabajando jaja

Un saludo !


----------



## ByAxel (Ago 13, 2010)

Moyano Jonathan dijo:


> ahora estoy atascado en estudiar la dll nativa de windows HID.DLL que me tiene con la cabeza trabajando jaja



Arriba el manual 

Saludos


----------



## Meta (Ago 13, 2010)

@moyano-jonathan Felicidades, así es como es. Ya te queda menos, has dado un paso, ahora a por otro paso así poco a poco hasta avanzar.


----------



## Zetthketin (Ago 13, 2010)

Hey muchas gracias por los consejos ya logre hacer que funcionara en programa 
el problema: yo pense que al momento de correr la aplicacion se generaba el proyecto y en mi caso eso no paso, lo unico que tube que hacer es apretar el boton de volver a generar el proyecto y esta vez funciono perfectamente, despues hice el encapsulado y todo bien 

Gracias a todos principalmete a lubeck por su tiempo y rapida respuesta


----------



## Meta (Ago 14, 2010)

A por el manual del USB 2.0.


----------

