2011-01-29 14 views
11

Entonces, estoy agregando una etiqueta programáticamente y estoy necesitando alterar un poco el margen superior al valor 8. No puedo hacer eso de la manera obvia, Entonces, ¿qué pasa con mi forma de pensar?Vb.net - Estableciendo un valor de margen de control

Dim LabelAdapter As New Label 
LabelAdapter.text = "Adapter" 
LabelAdapter.Margin.Top = 8 

Esto me da el error "expresión es un valor y por lo tanto no puede ser el objetivo de una misión".

Respuesta

18

Label.Margin devuelve un objeto Padding.

Dado que Padding es una estructura, en realidad devolverá una copia . Está cambiando el valor de Top de esa copia, no del margen del control real. Como eso no tendría ningún efecto notable, VB lo previene correctamente.

Debe asignar un margen completamente nuevo. De hecho, la propiedad Margin (o más bien, la clase Padding) está posiblemente rota, ya que no permite una manera fácil de cambiar los valores individuales.

Desafortunadamente, solo tenemos que vivir con eso. Así que para cambiar sólo el valor Top, tenemos que escribir:

Dim old As Padding = LabelAdapter.Margin 
LabelAdapter.Margin = New Padding(old.Left, 8, old.Right, old.Bottom) 

raro, ¿eh?

+0

Si Intellisense no sugiere la clase de relleno, ignórela, con mayor frecuencia no funcionará; por cierto, ¿por qué sucede esto? –

+0

@WeaponX No entiendo tu comentario. –

+0

Al menos usando VB.NET, el IDE (2013) no sugerirá algunas clases como Padding hasta que escriba el nombre completo. –

Cuestiones relacionadas