在C#.NET中设置最小窗口大小
我在我正在处理的C#应用程序中设置窗口的最小大小时遇到问题。 我在表单的构造函数中尝试了这段代码:
this.MinimumSize.Width = 800; this.MinimumSize.Height = 600;
但是编译器说:
无法修改’System.Windows.Forms.Control.MinimumSize’的返回值,因为它不是变量
任何人都可以为我解释这个问题吗?
编辑:
使用:
this.MinimumSize = new Size(800,600);
得到:
error CS0118: 'System.Windows.Forms.Form.Size' is a 'property' but is used like a 'type'
对不起,我忘了提到我已经尝试过了。 还忘了提到我没有使用Visual Studio。
由于Size
是一个结构,你不能这样做。
相反,您需要为属性分配一个新的Size
值,如下所示:
this.MinimumSize = new Size(800, 600);
编辑您的编译器是错误的; 它使Size
类与Control.Size
属性混淆。
要解决此不公正的错误,您需要使用命名空间限定类型:
this.MinimumSize = new System.Drawing.Size(800, 600);
或者你只是忘了using System.Drawing
。
你应该使用这样的东西:
this.MinimumSize = new Size(100, 100);
Width
和Height
用于获取现有值而不是设置它们。
如果你转到MinimumSize
的定义,你会看到:
public override Size MinimumSize { get; set; }
再次确认即使您决定为其设置值,也必须传递实际的Size
实例。 Width
和Height
是严格绑定到Size
实例的属性。
您需要直接分配给MinimumSize
属性:
this.MinimumSize = new Size(800, 600);
基本上, MinimumSize
属性的返回值始终是一个新的 struct对象; 编译器不允许您分配给此临时值(如错误中所述,它不是变量)。
这个MSDN社交主题对这个主题最具启发性。
这是编译器错误:
http://msdn.microsoft.com/en-us/library/wydkhw2c(VS.71).aspx
基本问题是MinimumSize成员属性返回一个结构 – 它是一个值类型 – 因此被复制到本地临时变量 – 这会阻止您将值写回底层属性。
要解决这个问题,您需要分配给MinimumSize本身:
this.MinimumSize = new Size(800, 600);