• Viernes 8 de Noviembre de 2024, 20:13

Autor Tema:  Leer variable de otra clase  (Leído 26235 veces)

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Leer variable de otra clase
« en: Lunes 27 de Abril de 2009, 00:01 »
0
Hola! soy un poco nuevo en la programación con VB.net. Tengo un proyecto con diferentes clases cada una de ella están en un fichero distinto. Hay una de ellas que es el formulario principal (Form1) y ahí tengo una caja de texto. Pues bien, me gustaría leer ese valor desde otra clase (la que se llama OPCServer). No tengo ni idea como hacerlo, he probado con una cosa que encontré en internet y era crear una clase para la variable para ponerla publica, eso lo hice dentro del archivo de FOrm1 y puse:
Código: vb.net
  1.     Public Class MiGlobal
  2.         Public MiVariable As Integer
  3.  
  4.     End Class
  5.  

Les adjunto una captura del espacio de trabajo que tengo haber si alguien me puede ayudar.

Muchas gracias!!!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #1 en: Lunes 27 de Abril de 2009, 17:57 »
0
Hola amigo ,

cuando creas una clase para poder usarla en otra clase debes referenciar debes importar la referencia hacia la clase asi

imports tuproyecto.tuclase

espero poder ayudarte

saludos Cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #2 en: Lunes 27 de Abril de 2009, 22:04 »
0
Gracias por responder.

He importado como me dices.

Y a la hora de utilizar la variable de la otra clase me dice este error.

Citar
error BC30469: La referencia a un miembro no compartido requiere una referencia de objeto.

Como podría solucionarlo?

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #3 en: Lunes 27 de Abril de 2009, 22:25 »
0
hola amigo, seguramente tu variable la debes de haber creado como privada solo para la clase

debes crear una referencia al objeto creando una nueva instancia de la clase

por ejemplo

dim nuevaclase as new clase

ahi debes poder usar la variable con el objeto nuevaclase

nuevaclase.mivariable=2 ' en caso de ser entera la variable

saludos cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #4 en: Lunes 27 de Abril de 2009, 22:42 »
0
mm no entiendo bien lo que me explicas.. pero aquí te pego el principio de la clase de la que quiero leer la variable. La variable se llama variable1.

Código: vb.net
  1.  
  2. Imports System
  3. Imports System.Drawing
  4. Imports System.Collections
  5. Imports System.ComponentModel
  6. Imports System.Windows.Forms
  7. Imports System.Threading
  8.  
  9. Imports Softing.OPCToolbox
  10.  
  11.  
  12.  
  13. Namespace noche2
  14.  
  15.     Public Class Form1
  16.  
  17.  
  18.  
  19.         Inherits System.Windows.Forms.Form
  20.         Private components As System.ComponentModel.Container = Nothing
  21.         Private m_outProc As OutProc = New OutProc
  22.         Public WithEvents variable1 As System.Windows.Forms.TextBox
  23.         Private m_opcServer As OpcServer = Nothing
  24.         Public Sub New(ByVal anOutProc As OutProc)
  25.  
  26. .........
  27.  
  28.  

Como ves la tengo declarada como publica.

En la otra clase lo que quiero hacer es..

VariabledeotraClase =  Variable1

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #5 en: Lunes 27 de Abril de 2009, 22:49 »
0
cuando creas una nueva clase para poder acceder a esa clase deber crear una nueva instancia de esa clase para poder acceder a la variable que debe ser declarada dentro de la clase como publica,te explico creando una clase de ejemplo

public class MiClase
Public variable 1 as int
private variable2 as int

ENd Clase

aqui he creado una clase con 2 variables una publica y una privada, es este caso a la unica que voy a poder acceder desde otra clase es a la publica, ahora para poder usar esta clase en otra debes agregar la referencia


Imports MiProyecto.MiClase
Public Class ClaseNueva
Dim ClaseMia as new MiClase

sub leerVariable()
ClaseMia.Variable1=2
end sub

ENd Clase

de esta forma creo la clase que contiene mi variable(MiCLase) e importandola con el imports en la clase que voy a utilizar la variable(ClaseNueva) puede leer la variable en cuestion(ClaseMia.Variable1)

espero haberme explicado bien

saludos Cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #6 en: Lunes 27 de Abril de 2009, 23:13 »
0
Ahora te entendí, pero he hecho lo que me dices pero no me funciona, no me da error al compilar, pero la variable no tiene nada.

No se que puedo hacer ya que llevo unos días con dolor de cabeza. Si quieres te puedo mandar el proyecto para que lo veas y me digas mejor.

saludos! y gracias.

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #7 en: Lunes 27 de Abril de 2009, 23:23 »
0
Listo enviame el proyecto , luego corregido pongo la solucion

saludos cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #8 en: Lunes 27 de Abril de 2009, 23:28 »
0
Aquí te lo adjunto.

Decirte..

la clase de la que quiero coger la variable es form1, y es variable1 que es una caja de texto

en la clase OPCserver en la linea 186 la variable campo1 es la que quiero que valga lo que ponga form1

Muchisimas gracias!!!

PD: Lo he comprimido con Winrar y es un proyecto VB.NET 2008
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #9 en: Martes 28 de Abril de 2009, 09:16 »
0
Necesitas un manual sobre programación orientada a objetos, cómprate un libro sencillito y pequeño que te explique los fundamentos, para aprender qué es un objeto y cómo se manipulan, de otra forma aunque se te resuelva tu duda, vendrás al día siguiente con otra tontería similar. Aprendiendo de esa manera, sólo tendrás grandes lagunas, y lo poco que sepas sólo lo sabrás 'de memoria', por que te lo han dicho, sin llegar a comprender realmente por qué es así.
«Ma non troppo»
----> ModoVacaciones = False<----

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #10 en: Martes 28 de Abril de 2009, 15:31 »
0
Hola!! gracias por el consejo, pero tengo dos libro de VB.Net y no consigo ver donde me resuelve mi duda. Me defiendo bastante programando en ADA, C#, C++, PHP, porque lo utilizo mucho en mi carrera (Ing Teleco) pero nunca había programado con .net, es mi primer programa y no es muy sencillo, estaba haciendo un servidor OPC para que se conecte con otro programas y no funciona ninguna de la nociones que tenia yo para llamar a una variable desde otra clase.

De todas formas buscaré otros libros que no sean ANAYA, he visto alguno por el emule, me los bajaré a ver que tal.

Gracias de todos modos.

Salu2

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #11 en: Martes 28 de Abril de 2009, 17:39 »
0
Hola, disculpa la demora es que no tenia instlado el vs 2008

por lo que veo en la clase opserver en la linea 186 pones

campo1=2020, ahi nunca le asignas a campo1 lo que tiene variable1, debes hacer
campo1=CInt(claseMia.variable1.Text)

no pude corre el programa ya que usas una dll que no pude registrar en mi sistema por algun motivo , tal vez no fue creada para el sistema operativo que uso xp sp2,

saludos cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #12 en: Martes 28 de Abril de 2009, 17:45 »
0
hola, no pasa nada.

Si puede 2020 para comprobar. La solución que me has puesto ya la había probado yo y no me funcionó, la variable me sale vacía. Probé a crear en la otra clase una variable publica como un integer normal e igualarlo a un número y tampoco llega nada. No se que puede estar pasandome.

Muchisimas gracias!!.

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #13 en: Martes 28 de Abril de 2009, 18:04 »
0
haber vamos por parte,  tenemos la clase opcserver en la cual hay una variable llamada campo1 que deseamos que reciba el valor que ingresamos en el objeto llamado variable1

en la clase opcserver hagamos lo siguiente, creemos una propiedad para el campo1 en al region property coloca esto

 Public Property regcampo1() As Int32
            Get
                Return Campo1

            End Get
            Set(ByVal value As Int32)
                Campo1 = value
            End Set
 End Property

en le formulario form1 declaras una variable  de tipo opcserver

Private m_opcServer As OpcServer = Nothing

ahora para poder asignarle a campo1 el valor del objeto vaiable1 ponemos

m_opcServer.regcampo1 = CInt(variable1.Text)
MessageBox.Show(m_opcServer.regcampo1)
y pon un mensaje para verificar que campo1 cojio el valor


prueba esto, debe funcar

saludos cordiales

JC

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #14 en: Martes 28 de Abril de 2009, 18:14 »
0
en caso de que en modo ejecucion te salga alfun error de referencia no establecida como instancia de un objeto tiene que cambiar la forma de declarar la variable de la clase opcserver asi

 Private m_opcServer As New OpcServer

el operador new hacer una referencia hacia la clase

saludos cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #15 en: Martes 28 de Abril de 2009, 22:57 »
0
Hola! tuve que poner lo ultimo que me dijiste.

Y ahora lo que me pasa es que en la clase opcserver me sale MessageBox con el valor correcto.

 
Código: vb.net
  1.       Public Property regcampo1() As Int32
  2.             Get
  3.                 Return Campo1
  4.  
  5.             End Get
  6.             Set(ByVal value As Int32)
  7.                 Campo1 = value
  8.                 System.Windows.Forms.MessageBox.Show(Campo1)
  9.             End Set
  10.         End Property
  11.  

Pero cuando lo pongo en donde quiero que me coja la variable, osea en la linea 187 creo que era me sale que vale cero. pq??

Gracias!!

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #16 en: Martes 28 de Abril de 2009, 23:35 »
0
hola,

una vez que le asignas el valor a la variable campo1 con la propiedad como te dije no es necesario volver a asiganarle el mismo valor en la linea 187 osea ya no tienes q poner "campo1=" ya que como instancias la clase y asiganas valor al campo1 con la propiedad durante el tiempo de ejecucion de tu proyecto la variable en esa referencia de clase mantendra el valor asi que podras usarlo en cualquien procedimiento de la clase opcserver, espero haberme hecho entender

saludos cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #17 en: Martes 28 de Abril de 2009, 23:43 »
0
hola de nuevo. sisi te entendí. Pero.. lo que yo te decía es que justo en esta estructura donde esta lo del Messagebox, me retorna el valor correcto. Pero en la linea esa 187 hago lo del MesageBox igual que en el código de abajo  y me sale que la variable vale 0.

La variable la tengo declarada como    Public Campo1 As Integer

Código: vb.net
  1.  
  2.      Public Property regcampo1() As Int32
  3.             Get
  4.                 Return Campo1
  5.  
  6.             End Get
  7.             Set(ByVal value As Int32)
  8.                 Campo1 = value
  9.                 System.Windows.Forms.MessageBox.Show(Campo1)
  10.             End Set
  11.         End Property
  12.  

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #18 en: Miércoles 29 de Abril de 2009, 00:07 »
0
mmm es raro ya que una vez que muestras el valor con el messagebox en la propiedad deberia mostrarlo en la otra funcion, pero no seria raro que en alguna linea este reescribiendo nuevamente la variable o este volviendo a declararla, te recomiendo que ejecutes el proyecto en depuracion paso a paso(F11) para poder observar si en algun momento del proyecto se sobreescribe la variable

saludos cordiales

JC

rogalde

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #19 en: Miércoles 29 de Abril de 2009, 00:19 »
0
Si la verdad que a mi también me extraña mucho. He hecho este ejemplo y me funciona perfecto. Haré lo que me del modo depuración.

Gracias!! de verdad!

Código: vb.net
  1. Public Class Form1
  2.  
  3.     Public v1 As Integer
  4.     Public pepe As New form2
  5.  
  6.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  7.         v1 = 44
  8.         pepe .regcampo1 = 696969
  9.         pepe .pruebaFuncion()
  10.     End Sub
  11.  
  12.  
  13. End Class
  14.  
  15.  
  16. Public Class form2
  17.  
  18.     Public Campo1 As Integer
  19.     Public Property regcampo1() As Int32
  20.         Get
  21.             Return Campo1
  22.         End Get
  23.         Set(ByVal value As Int32)
  24.             Campo1 = value
  25.         End Set
  26.     End Property
  27.  
  28.     Public Sub pruebaFuncion()
  29.         System.Windows.Forms.MessageBox.Show(Campo1)
  30.     End Sub
  31.  
  32. End Class
  33.  

fORU-

  • Miembro MUY activo
  • ***
  • Mensajes: 225
  • Nacionalidad: mo
    • Ver Perfil
Re: Leer variable de otra clase
« Respuesta #20 en: Miércoles 29 de Abril de 2009, 07:06 »
0
mmm hola que tal companero, como me dio flojera leer todos lo hilos  :lol:   me basare en su pregunta original "como leer variabl de otra clase"
la solucion seria esta ,

Public Shared <nombre_var> as <tipo_de_dato>

esto seria como static en  C o en JAVA, donde el valor de la variable de la clase se matiene hasta no ser que se modifique o que se termine el programa.

mas tarde editare para poner un ejemplo sencillo.

ahi va el codigo, en realidad no se si estoy fuera de contexto pero el esfuerzo de querer ayudar esta  :P

creo la clase contador con un atributo shared y publico
Código: vb.net
  1.  
  2. Public Class Contador
  3.     Public Shared i As Integer = 0
  4.     Public Sub contar()
  5.         i = i + 1
  6.     End Sub
  7. End Class
  8.  
  9.  

creo la clase reloj donde el metodo reloj hace uso del metodo contar de la clase contador

Código: vb.net
  1.  
  2. Public Class Reloj
  3.     Private tictac As New Contador
  4.     Public Sub reloj()
  5.         tictac.contar()
  6.         MsgBox(Contador.i, MsgBoxStyle.Information, "Reloj")
  7.     End Sub
  8. End Class
  9.  
  10.  

lo que sucede aqui es que el metodo reloj de la clase reloj hace uso del atributo "i" de la clase contador sin perder el valor de i, como dije anteriormente el valor del atribitu "i" siempre estara presente mientras el programa este corriendo. sino queda claro mi explicacion podrias leer sobre variables estaticas en C o en JAVA
atte:fORU-