2009-05-04 32 views
13

我有一個UserControl,其中包含幾個布爾屬性。如果沒有在.aspx頁面中明確設置,我希望它們默認設置爲true,或者如果沒有辦法設置默認值,至少強制聲明它們。我知道有一種方法可以做到這一點,因爲很多控件都需要屬性,這些屬性在您嘗試運行時會破壞您的應用程序,並且它們未被聲明。屬性中的用戶控件默認值

我該怎麼做?

例子:

<je:myControl runat="server" id="myControl" showBox="False"> 

我希望系統要麼打破或設置默認爲「true」如果showBox留出這個聲明。

謝謝!

class myControl 
{ 
    private bool _showBox = true; 

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)] 
    public bool showBox 
    { 
     get { return _showBox; } 
     set { _showBox = value; } 
    } 
} 

可選您可以添加DefaultValueAttribute爲設計師

回答

20

的默認值定義的屬性這樣的:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
} 

或控件的構造函數,設置默認值:

public MyControl() 
{ 
    _ShowBox = false; 
} 

,或者如果它沒有指定拋出異常:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
    get { return _ShowBox; } 
} 
+0

謝謝!這是完美的 – Jason 2009-05-04 08:10:56

2

聲明變量時只需設置所需的默認值。

24

我知道我遲到了,但我只想提及

[DefaultValue(false)] 

不會將該屬性設置爲false。參見:http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx。它說:

「DefaultValueAttribute不會使用該屬性的值自動初始化成員,必須在代碼中設置初始值。」

此屬性僅用於在Visual Studio Designer中指示您認爲是默認值。如果有人使用您的控件更改此值,則會顯示加粗以表示該值不是默認值。

2

ReSharper的建議使用自動屬性,並在構造函數中設置默認值,就像這樣:

public class MyControl 
{ 
    public MyControl() 
    { 
    ShowBox = true; 
    } 

    public bool ShowBox { get; set; } 
}