2011-03-15 85 views
25

我在設置我正在處理的C#應用​​程序中窗口的最小大小時遇到​​了問題。我曾嘗試這個代碼在窗體的構造函數:在C#中設置最小窗口大小.NET

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

但是編譯器說:

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

任何人都可以提供一些線索在這個問題上我嗎?

編輯:

使用:

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

給出:

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

對不起,我忘了提,我已經試過了。 也忘了提及我沒有使用Visual Studio。

+0

尺寸是'struct',你必須創建一個新的'struct'。 – 2011-03-15 15:36:15

+1

請查閱您最喜愛的C#語言手冊,瞭解值和引用類型之間的區別。 Size類型是一個結構體,一個值類型。 – 2011-03-15 15:39:46

+0

這是什麼編譯器? – SLaks 2011-03-15 15:57:39

回答

43

由於Size是一個結構,你不能這樣做。
相反,你需要一個新的Size值賦給屬性,像這樣:

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

編輯你的編譯器是錯誤的;它將Size類與Control.Size屬性混淆。

要解決這種不公正的錯誤,你需要一個命名空間來限定類型:

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

,或者你只是忘記using System.Drawing

+0

system.drawing ...爲什麼我應該需要那個只是爲了設置一個該死的窗口大小?謝謝 – Dai 2011-03-15 16:10:49

+6

@戴:因爲Windows窗體需要繪製。 http://msdn.microsoft.com/en-us/library/system.drawing.aspx – 2011-03-15 17:19:14

+0

有同樣的問題,這是答案。謝謝+1! – 2014-03-24 18:05:20

3

您需要直接分配給MinimumSize屬性:

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

基本上,MinimumSize屬性的返回值始終是結構對象;編譯器不會讓你分配給這個臨時值(如錯誤中所述,它不是一個變量)。

This MSDN Social thread對這個問題是最有啓發性的。

6

你應該使用這樣的事情:

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

WidthHeight用來獲取現有值,而不是設置它們。

如果你去的MinimumSize的定義,你會看到:

public override Size MinimumSize { get; set; }

再次確認,即使你決定爲它設置的值,你必須通過一個實際Size實例。WidthHeight屬性嚴格依賴於Size實例。

+0

這實際上並不正確;屬性是可寫的。 – SLaks 2011-03-15 15:42:56

+0

屬性對於Size實例是可寫的(當您將它傳遞給MinimumSize時)。 – 2011-03-15 15:45:44

3

這是編譯器的錯誤:

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

的基本問題是,的minimumSize構件屬性返回一個結構 - 這是一個值類型 - 等被複制到本地臨時變量 - 這阻止您將值寫回基礎屬性。

要解決這個問題,就需要分配給自己的minimumSize:

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