Como puedo asignar el valor de un NumericUpDown como valor de una variable de const eh intentado hacerlo normalmente ajustando el valor de Numeric pero ni hací e intente haciendo una variable y tampoco, no se si debo definir una espicificacion del dato en la constante.
Dim MD As Integer = NumericUpDown5.Value
Private Const mouted = MD
Un const es un valor que no cambia, y tiene que tener un valor fijo.
¿Por qué necesitas que sea un const?
Una constante, como su nombre indica es constante. Luego no puede adjudicarse ningún valor por procedimiento.
Cuando se compila el valor queda fijado... es decir todas las constantes con remplazadas por el valor contante. por eso siempre dará error cuando intentes asignarlo desde una ubicación que en sí misma no sea también una constante.
Es decir esto es válido:
Public Const c_Doce = 12
Public Const c_Trece = (c_Doce +1)
Y es válido porque c_doce tiene un valor que es constante y c_doce +1 , al ser tanto c_doce y 1 valores constantes es válido.
Esto no es válido:
Public MiVar As integer = 12
Public Const c_Doce = MiVar
En fin, tu debes saber si realmente necesitas una constante o una variable. Si has de asignar un valor desde un control numericUpDown, desde luego no es una constante lo que necesitas. O bien, no entiendes lo que significa constante.
Si todavía necesitas que el valor del control numericUpdown, quede en la constante, lo que debes hacer es revisar que valor tiene durante diseño y ese mismo valor consignarlo en la constante... que tiene numericUpDown5.Value = 52, pués vas a tu contante y le pones ese valor
Private Const mouted = 52
Pero no puedes asignarlo por código, porque entonces sería una variable.
Hay una solución pero no merece la pena en la mayoría de casos, aún así te la comento, por si soluciona tu caso (ya que siendo una variable, actúa realmente como una constante):
Private MiVar As Integer = 12
Public Property Mouted As Integer
Get
Return MiVar
End Get
Set(ByVal value As Integer)
Static FirstTime As Boolean = False
If (FirstTime = False) Then
MiVar = value
FirstTime = True
'Else
'Disparar error si se cree conveniente...
End If
End Set
End Property
Y que se utilizaría así:
Dim MD As Integer = NumericUpDown5.Value
Mouted = MD
Este código te permite asignar un valor procedente desde donde quieras, pero una sola vez, luego opera como si fuera una constante, se puede leer pero no escribir. y fíjate que por defecto, también le podemos dar inicialmente un valor...
Hola.
1. La propiedad NumericUpDown.Value es de tipo Decimal, no Integer. Puedes dejar que el compiler castee el tipo de forma implícita pero no es lo más apropiado. Deberías especificar la sentencia Option Strict On en tu código fuente... así te evitarás posibles errores humanos.
2. No puedes declarar la constante ya que eso no es un valor constante. Sencillamente.
Una solución alternativa de uso genérico seria declarar una propiedad de solo lectura... ( dependiendo claro está de los que realmente pretendas hacer ):
Public ReadOnly Property Mouted As Double
Get
If (Me.NumericUpDown5 IsNot Nothing) Then
Return Me.NumericUpDown5.Value
Else
Return 0.0R
End If
End Get
End Property
O bien:
Public ReadOnly Property Mouted As Integer
Get
If (Me.NumericUpDown5 IsNot Nothing) Then
Return CInt(Me.NumericUpDown5.Value)
Else
Return 0I
End If
End Get
End Property
...¿Y si nos explicas por qué quieres hacer eso?.
Saludos.
Vaya tienen razón los 3 se los agradezco no tenia muy en claro como se usaba la constante y pues yo quiero que la "constante" en este caso ya sería una variable como me explican este actualizando su valor conforme vaya yo aumentando el valor del numericupdown
codigo
Public Class Form1
'ESTE ES QUE EDITE Y LES MOSTRE
Dim MD As Integer = NumericUpDown5.Value
Private Const mouted = MD
'ACA ES EL NORMAL
Private Const mouted = 4
Private Const mouted1 = 2
Agrego intente con tipo de Decimal como me comento elektro pero aun así me da un error cabe en declarar que todo lo estoy realizando desde una funcion.
Dim mouted1 As Decimal = NumericUpDown5.Value
'este es el error
Referencia a objeto no establecida como instancia de un objeto.
Ten en cuenta que antes de poder asignar un valor a una variable procedente de un control, antes debe haberse creado la instancia del control...
...Esto es, desde qué procedimiento estás asignando el valor del NumericupDown.
No sé si el código que has puesto es consecuente o si son dos intentos distintos. si es consecuente (uno le sigue al otro, es decir ambos están en activos), si ya has declarado mouted1 como constante, no puedes utilizarlo al mismo nivel como otro tipo. Si lo usas en otro nivel, será sombreando al que esté en un nivel más arriba... es decir no será copia ni tendrá nada que ver con la otra declaración.
Por otro lado, poque no aprovechas el evento Change del control NumericUpDown, para actualizar el valor de esa variable?
private sub NumericUpDown5_Change(.....
Mouted = e.value ' ...o Mouted= NumericUpDown5.value si solo hay ese objeto enganchado al evento...
end sub
Ya lo hice mira como quedo, pero creo que no cambia el valor
Public MU As Integer
Public MD As Integer
Dim mouseclickup As Decimal = MU
Dim mouseclickdown As Decimal = MD
Eso es en mi función
y ahora aca este desde el control de numeric
Private Sub NumericUpDown5_ValueChanged....
MU = NumericUpDown5.Value
End Sub
Private Sub NumericUpDown4_ValueChanged...
MD = NumericUpDown4.Value
End Sub
añade un messabox.message(mu.Tostring) a ambas funciones y ve cambiando valores al numeric a ver si cambia o no...
He de suponer que la declaración de MU y MD están en la misma clase que el control, no?????. Si no estás creando variables d eigual nombre en otra parte del proyecto...
Si tu código es así, con dos clases:
public class MisCosas
Public Md as decimal
'....
End class
private class form1
private sub NumericUpDown5_valuechanged(...
Md = NumericUpDown5.Value
En sub
End class
Esto no va a funcionar...
Pero esto sí...
public class MisCosas
Public Md as decimal
'....
End class
private class form1
private mc as new MisCosas
private sub NumericUpDown5_valuechanged(...
mc.Md = NumericUpDown5.Value
En sub
End class
Si tienes dudas muévete paso a paso pulsando F12... y así ves por donde pasa y por donde no...
Listo muchas gracias solo cambie unas cosas de lo que me brindaste y quedo al 100 ;-)