2011-03-15 84 views
25

Tengo problemas para configurar el tamaño mínimo de mi ventana en una aplicación C# en la que estoy trabajando. He tratado este código en el constructor del formulario:Establecer el tamaño mínimo de ventana en C# .NET

this.MinimumSize.Width = 800; 
this.MinimumSize.Height = 600; 

Pero el compilador dice:

Cannot modify the return value of 'System.Windows.Forms.Control.MinimumSize' because it is not a variable

¿Alguien puede arrojar algo de luz sobre esta cuestión para mí?

EDIT:

Usando:

this.MinimumSize = new Size(800,600); 

Da:

error CS0118: 'System.Windows.Forms.Form.Size' is a 'property' but is used like a 'type' 

En este momento me olvidé de mencionar que ya había probado eso. También olvidé mencionar que no estoy usando Visual Studio.

+0

El tamaño es un 'struct' y hay que crear una nueva' struct'. –

+1

Consulte su libro de idiomas C# favorito sobre la diferencia entre el valor y los tipos de referencia. El tipo de Tamaño es una estructura, un tipo de valor. –

+0

¿Qué compilador es ese? – SLaks

Respuesta

43

Dado que Size es una estructura, no se puede hacer eso.
lugar, es necesario asignar un nuevo valor a la propiedad Size, así:

this.MinimumSize = new Size(800, 600); 

EDITAR Su compilador es incorrecto; confunde la clase Size con la propiedad Control.Size.

Para evitar este error injusta, que necesita para calificar el tipo con un espacio de nombres:

this.MinimumSize = new System.Drawing.Size(800, 600); 

O simplemente olvidado using System.Drawing.

+0

system.drawing ... ¿por qué demonios debería necesitar eso solo para establecer un maldito tamaño de ventana? Gracias – Dai

+6

@Dai: Porque los formularios de Windows deben dibujarse. http://msdn.microsoft.com/en-us/library/system.drawing.aspx –

+0

Tenía el mismo problema, esta es LA respuesta. Gracias +1! –

3

necesita asignar directamente a la propiedad MinimumSize:

this.MinimumSize = new Size(800, 600); 

Básicamente, el valor de retorno de la propiedad MinimumSize es siempre un nuevo objeto estructura; el compilador no le permite asignar a este valor temporal (como se indica en el error, no es una variable).

This MSDN Social thread es más esclarecedor sobre el tema.

6

Debe utilizar algo como esto:

this.MinimumSize = new Size(100, 100);

Width y Height se utilizan para obtener los valores existentes en lugar de establecer ellos.

Si vas a la definición de MinimumSize, verá esto:

public override Size MinimumSize { get; set; }

confirmando una vez más que, incluso cuando se decida a establecer el valor para ello, tiene que pasar un Size instancia real .Width y Height son propiedades estrictamente relacionadas con la instancia Size.

+0

Eso no es realmente cierto; las propiedades son escribibles – SLaks

+0

Las propiedades se pueden escribir para la instancia de Tamaño (cuando la pasa a MinimumSize). –

3

Este es el error del compilador:

http://msdn.microsoft.com/en-us/library/wydkhw2c(VS.71).aspx

El problema básico es que la propiedad de miembro MinimumSize devuelve una estructura - que es un tipo de valor - y así se copia en una variable temporal local - y esto le impide escribir un valor de nuevo a la propiedad subyacente.

Para evitar esto, es necesario asignar a minimumSize sí:

this.MinimumSize = new Size(800, 600); 
Cuestiones relacionadas