elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ¿Cómo se llama una función en VB .net?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo se llama una función en VB .net?  (Leído 3,982 veces)
Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
¿Cómo se llama una función en VB .net?
« en: 21 Marzo 2017, 07:37 am »

Hola:

Haciendo pruebas ya que en VB .net no entiendo mucho. Tengo esta función tonta sin parámetros.

Código
  1. Sub Mensaje1()
  2.            Console.WriteLine()
  3.            Console.WriteLine("Creando archivo al disco duro...")
  4.        End Sub

Lo he intentado llamar directamete así y no funciona.
Código
  1. mensaje1()

No sirve.

¿Cómo se le llama?

Saludos.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ¿Cómo se llama una función en VB .net?
« Respuesta #1 en: 21 Marzo 2017, 12:15 pm »

eso no es una funcion, es un evento... tienes que llamarla con call si no me equivoco, intenta con un tutorial de vb.net o espera a que llegue alguien con experiencia en esto y te explique


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: ¿Cómo se llama una función en VB .net?
« Respuesta #2 en: 21 Marzo 2017, 13:06 pm »

Para aclarar las cosas:
No es una función ni tampoco un evento, sino un método... Sub sería el equivalente a void en C# (un bloque de código que no devuelve un valor de retorno).

En VB.NET no se utiliza la sentencia Call para nada, eso es de VB. Cabe mencionar que también se puede utilizar en VB.NET, pero si existe es solo por motivos de compatibilidad. Nadie lo usa.



Lo he intentado llamar directamete así y no funciona.
Código
  1. mensaje1()

No sirve.

Lo estás llamando correctamente. El problema probablemente sea que la clase donde declaraste ese método tenga un nivel de acceso inferior a la clase desde donde lo estés intentando llamar, o que no hayas instanciado la clase donde declaraste dicho método. Corrije el nivel de visibilidad del método y/o de la clase (ej. Public Shared Sub MiMetodo()).

De todas formas no somos adivinos, no sé que significa "no funciona" o "no sirve". Muestra el mensaje de error por lo menos. Esto ya deberías tenerlo más que presente como usuario habitual del foro de programación, proporciona los detalles necesarios. Muestra la definición de la clase o del módulo donde tengas declarado ese método.

EDITO:
Formas en las que puedes llamar a ese método:


Código
  1. <HideModuleName>
  2. Public Module MyModule1
  3.  
  4.    Public Sub MyMethod()
  5.    End Sub
  6.  
  7. End Module
Código
  1. MyModule1.MyMethod()


Código
  1. Public NotInheritable Class MyClass1
  2.  
  3.    Public Sub New()
  4.    End Sub
  5.  
  6.    Public Sub MyMethod()
  7.    End Sub
  8.  
  9. End Class
Código
  1. Dim instance As New MyClass1()
  2. instance.MyMethod()


Código
  1. Public NotInheritable Class MyClass2
  2.  
  3.    Private Sub New()
  4.    End Sub
  5.  
  6.    Public Shared Sub MyMethod()
  7.    End Sub
  8.  
  9. End Class
Código
  1. MyClass2.MyMethod()

¡Saludos!
« Última modificación: 21 Marzo 2017, 15:18 pm por Eleкtro » En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: ¿Cómo se llama una función en VB .net?
« Respuesta #3 en: 21 Marzo 2017, 15:39 pm »

Hola:

Se me había pasado de que la función devuelve vaor y el método no.
http://es.stackoverflow.com/questions/7403/diferencias-entre-m%C3%A9todos-procedimiento-funci%C3%B3n-para-que-sirven-cada-uno-y-co
https://asm86.wordpress.com/2012/05/19/proceso-subrutina-funcion-y-metodo-son-cosas-diferentes/

Funciona así por lo que veo.

Código
  1. Public Shared Sub Mensaje1()
  2.            Console.WriteLine()
  3.            Console.WriteLine("Creando archivo al disco duro...")
  4.        End Sub

Esta parte y ano me da problemas.

He probado muchos convertidores y ninguno saca algo al 100 %. Gracias por la propuesta.  Ahora te toca convertir estas líneas que no lo hace bien.
http://converter.telerik.com/
http://www.mundoprogramacion.com/NET/WebServices/deCSaVB_web.aspx

El código es muy grande y no traduce bien todo. Voy partes por partes como este y este no convierte.
Código
  1. Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)

Citar
Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   BC32022   'Public Event DataReceived As SerialDataReceivedEventHandler' es un evento y no se puede llamar directamente. Use una instrucción 'RaiseEvent' para generar un evento.   Recibir_archivo_desde_Arduino_consola_VB   C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb   48   Activo

Hay otra parte del código que traduce bien en teoría, pero hay muchos peros, da errores en VB .net.
De C#:
Código
  1.                SerialPort sp = (SerialPort)sender;
  2.                string indata = sp.ReadExisting();
  3.                string[] data = indata.Split('A');
  4.                cantidadBytes = int.Parse(data[0]);
  5.  
  6.  
  7.                switch (data[1].ToString())
  8.                {
  9.                    case "1":
  10.                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
  11.                        Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: JPG");
  12.                        break;
  13.  
  14.                    case "2":
  15.                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
  16.                        Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: PNG.");
  17.                        break;
  18.  
  19.                    default:
  20.                        Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
  21.                        break;
  22.                }
Código
  1. Dim sp As SerialPort = DirectCast(sender, SerialPort)
  2. Dim indata As String = sp.ReadExisting()
  3. Dim data As String() = indata.Split("A"C)
  4. cantidadBytes = Integer.Parse(data(0))
  5.  
  6.  
  7. Select Case data(1).ToString()
  8. Case "1"
  9. Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.")
  10. Console.WriteLine("Foto: " + data(1) + ". Tipo de archivo: JPG")
  11. Exit Select
  12.  
  13. Case "2"
  14. Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.")
  15. Console.WriteLine("Foto: " + data(1) + ". Tipo de archivo: PNG.")
  16. Exit Select
  17. Case Else
  18.  
  19. Console.WriteLine("Cosas raras en 'data': " + data.ToString())
  20. ' Por si hal algún error.
  21. Exit Select
  22. End Select



El código es muy largo, si quieren lo pongo, pero no intenten traducirlo de golpe todo porque no funcionará.

Gracias.
« Última modificación: 21 Marzo 2017, 15:42 pm por Meta » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: ¿Cómo se llama una función en VB .net?
« Respuesta #4 en: 21 Marzo 2017, 18:13 pm »

El código es muy grande y no traduce bien todo. Voy partes por partes como este y este no convierte.
Código
  1. Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)

En VB.NET, para asociar eventos en tiempo de ejecución se hace con las sentencias AddHandler y AddressOf.

Código
  1. AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived

Pero a diferencia de C# en VB.NET esto es algo opcional, no es necesario asociarlo de esa manera a menos que el objeto en cuestión haya sido creado en tiempo de ejecución. En su lugar puedes usar al keyword Handles:
Código
  1. Private Sub Puerto_serie_DataReceived(ByVal sender As Object, ByVal e As DataReceivedHandler) Handles Puerto_serie.DataReceived
  2.    ' ...
  3. End Sub



Código
  1. string[] data = indata.Split('A');
Código
  1. Dim data As String() = indata.Split("A"c)

Esto ni siquiera tiene que ver con VB.NET. No existe ninguna sobrecarga del método String.Split en cuya firma acepte un caracter como parámetro, sino un array de caracteres. Al escribir "A"c se casteará automáticamente y puedes llamarlo así, pero no es un buen hábito hacerlo ya que no estás evitando el factor de error humano...

Código
  1. string[] data = indata.Split(new char[] { 'A' });
Código
  1. Dim data As String() = indata.Split( { "A"c } )



Hay otra parte del código que traduce bien en teoría, pero hay muchos peros, da errores en VB .net.

A diferencia de C#, en VB.NET las cadenas de texto se concatenan usando el operador &, no +, el cual es un operador aritmético de suma. Se puede concatenar en ciertas circunstancias pero dará problemas ya que no es su propósito.

Aparte de eso, en VB.NET no es necesario escribir al final la sentencia Exit Select (break en C#). La instrucción ya va implícita en el código compilado.

Código
  1. ' Dim cantidadBytes As Integer
  2.  
  3. Dim sp As SerialPort = DirectCast(sender, SerialPort)
  4. Dim indata As String = sp.ReadExisting()
  5. Dim data As String() = indata.Split({"A"c})
  6. cantidadBytes = Integer.Parse(data(0))
  7.  
  8. Select Case data(1).ToString()
  9.  
  10.    Case "1"
  11.        Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
  12.        Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: JPG")
  13.  
  14.    Case "2"
  15.        Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
  16.        Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: PNG.")
  17.  
  18.    Case Else
  19.        Console.WriteLine("Cosas raras en 'data': " & data.ToString())
  20.  
  21. End Select

De todas formas tanto en C# como en VB.NET la concatenación tradicional (y fea) de strings puedes evitarlo, utilizando el método String.Format():
Código
  1. Console.WriteLine(String.Format("Foto: {0}. Tipo de archivo: {1}.", data(1) ,"PNG"))


Todo lo que estás preguntando son cosas básicas que podrías averiguar con dos minutos en Google o leyendo la referencia de VB.NET y su modo de empleo en MSDN, hay ejemplos para todo.
« Última modificación: 21 Marzo 2017, 18:44 pm por Eleкtro » En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: ¿Cómo se llama una función en VB .net?
« Respuesta #5 en: 23 Marzo 2017, 09:42 am »

Hola:

Parece que va cogiendo forma, aún así hay dos errores que no me deja en paz.

Código
  1. AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived

Concretamente el Me.
https://msdn.microsoft.com/es-es/library/20fy88e0.aspx

Citar
Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   BC30043   'Me' solo es válido en un método de instancia.   Recibir_archivo_desde_Arduino_consola_VB   C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb   49   Activo

Otro error es este:
Código
  1. Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
  2. Error BC30420 No se encontró 'Sub Main' en 'Recibir_archivo_desde_Arduino_consola_VB.Module1'. Recibir_archivo_desde_Arduino_consola_VB C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\vbc 1 Activo
  3.  

Llevo tiempo traquiniando y no lo campto.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: ¿Cómo se llama una función en VB .net?
« Respuesta #6 en: 23 Marzo 2017, 10:26 am »

Hola:

Parece que va cogiendo forma, aún así hay dos errores que no me deja en paz.

Código
  1. AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived

Concretamente el Me.
https://msdn.microsoft.com/es-es/library/20fy88e0.aspx

Declara un método a nivel de clase, llámalo  "Puerto_serie_DataReceived" y úsalo para controlar el evento Puerto_serie.DataReceived.

En mi respuesta de arriba te puse un ejemplo de eso mismo.



Otro error es este:
Código
  1. Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
  2. Error BC30420 No se encontró 'Sub Main' en 'Recibir_archivo_desde_Arduino_consola_VB.Module1'. Recibir_archivo_desde_Arduino_consola_VB C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\vbc 1 Activo
  3.  

Llevo tiempo traquiniando y no lo campto.

El módulo principal de tu aplicación de consola necesita tener un punto de entrada (EntryPoint), tal y como en C#.

Código
  1. Module Module1
  2.  
  3.    Public Sub Main()
  4.        ' ...
  5.    End Sub
  6.  
  7. End Module

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines