PageCatalogPart クラス
アセンブリ: System.Web (system.web.dll 内)
構文
解説
PageCatalogPart クラスは、Web パーツ ページにおいて、非常に特殊な目的を果たしています。このクラスは、ユーザーが以前ページに追加し、その後終了したコントロールを、またページに戻すことができるように維持するページ カタログとして機能します。このコントロールが表示されるのは、Web ページが、ユーザーがページ上でコントロールを追加および削除できる特別なビューであるカタログ表示モードの場合だけです。ユーザーがコントロールを終了したり再度開いたりできるようにするには、PageCatalogPart コントロールをページに追加します。ページでユーザーがコントロールを終了できないようにする場合は、PageCatalogPart コントロールをページに追加する必要はありません。
ページ カタログに追加されるのは、終了されたコントロールだけです。終了されたコントロールにはいくつかの属性があります。
コントロールの終了と削除は異なります。削除すると、コントロールはページから完全に削除されます。ユーザーは、終了したコントロール インスタンスをページ カタログから再度開くことができます。しかし、コントロールを削除した後に、その特定のインスタンスを復元することはできません。
PageCatalogPart コントロールをページに追加する最も一般的で便利な方法は、ページの永続形式で宣言することです。宣言 CatalogPart コントロールと同様に、PageCatalogPart コントロールは、Web ページで ASP.NET マークアップ要素の適切なコンテキスト内で宣言される必要があります。PageCatalogPart コントロールを Web ページで宣言する方法の作業用のコード例については、このトピックの「使用例」セクションを参照してください。次の宣言要素のシーケンスをページに追加する必要があります。
-
<asp:catalogzone> 要素を宣言し、それに子 <zonetemplate> 要素を追加して、ゾーン内で宣言されている任意の CatalogPart コントロールを含める必要があります。
-
<asp:pagecatalogpart> 要素は、<zonetemplate> 要素の子として追加する必要があります。DeclarativeCatalogPart コントロールや ImportCatalogPart コントロールなど、他にも <zonetemplate> 要素の子要素として宣言されている CatalogPart コントロールがある場合があります。
PageCatalogPart クラスでは、使用できるプロパティは 1 つだけです。この Title プロパティは、値が提供されない場合にページ カタログに対して既定のタイトルを提供できるように、基本プロパティをオーバーライドします。
PageCatalogPart クラスの他のプロパティは、継承プロパティをオーバーライドしますが、コントロールのレンダリングでは実際には使用されません。これらがオーバーライドされるのは、特別なコード属性を Microsoft Visual Studio 2005 のようなデザイン ツールで非表示にする設定ができるようにするためだけです。これらの非表示プロパティはレンダリングには何の効果もないので、使用しないでください。これらが IntelliSense および Visual Studio の [プロパティ] ペインに表示されないことで、開発者が誤って使用するのを防ぐことができます。これらの非表示プロパティについては、すべてそれぞれのヘルプ トピックにその旨記載されています。
PageCatalogPart クラスには、重要なメソッドもいくつかあります。GetAvailableWebPartDescriptions メソッドは、ページ カタログ内の各 WebPart コントロールに対する WebPartDescription オブジェクトを取得します。カタログでは、PageCatalogPart コントロールを使用することで、各サーバー コントロールについての情報をそのコントロールのインスタンスを作成しなくても表示できます。他に重要なメソッドは、GetWebPart メソッドです。このメソッドは、メソッドに渡される説明に基づいて、特定の WebPart コントロールのインスタンスを取得します。
ユーザー補助Web ページ上の PageCatalogPart コントロールを宣言によって使用する方法を次のコード例に示します。この例は、4 つの部分で構成されます。
コード例の最初の部分は、Web ページ上の表示モードをユーザーが変更できるようにするユーザー コントロールです。表示モードの詳細、およびこのコントロールのソース コードの説明については、「チュートリアル : Web パーツ ページでの表示モードの変更」を参照してください。
<%@ control language="vb" classname="DisplayModeMenuVB"%> <script runat="server"> ' Use a field to reference the current WebPartManager. Dim _manager As WebPartManager Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) AddHandler Page.InitComplete, AddressOf InitComplete End Sub Sub InitComplete(ByVal sender As Object, ByVal e As System.EventArgs) _manager = WebPartManager.GetCurrentWebPartManager(Page) Dim browseModeName As String = WebPartManager.BrowseDisplayMode.Name ' Fill the dropdown with the names of supported display modes. Dim mode As WebPartDisplayMode For Each mode In _manager.SupportedDisplayModes Dim modeName As String = mode.Name ' Make sure a mode is enabled before adding it. If mode.IsEnabled(_manager) Then Dim item As New ListItem(modeName, modeName) DisplayModeDropdown.Items.Add(item) End If Next mode ' If shared scope is allowed for this user, display the scope-switching ' UI and select the appropriate radio button for the current user scope. If _manager.Personalization.CanEnterSharedScope Then Panel2.Visible = True If _manager.Personalization.Scope = PersonalizationScope.User Then RadioButton1.Checked = True Else RadioButton2.Checked = True End If End If End Sub ' Change the page to the selected display mode. Sub DisplayModeDropdown_SelectedIndexChanged(ByVal sender As Object, _ ByVal e As EventArgs) Dim selectedMode As String = DisplayModeDropdown.SelectedValue Dim mode As WebPartDisplayMode = _ _manager.SupportedDisplayModes(selectedMode) If Not (mode Is Nothing) Then _manager.DisplayMode = mode End If End Sub ' Set the selected item equal to the current display mode. Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs) Dim items As ListItemCollection = DisplayModeDropdown.Items Dim selectedIndex As Integer = _ items.IndexOf(items.FindByText(_manager.DisplayMode.Name)) DisplayModeDropdown.SelectedIndex = selectedIndex End Sub ' Reset all of a user's personalization data for the page. Protected Sub LinkButton1_Click(ByVal sender As Object, _ ByVal e As EventArgs) _manager.Personalization.ResetPersonalizationState() End Sub ' If not in User personalization scope, toggle into it. Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, _ ByVal e As EventArgs) If _manager.Personalization.Scope = PersonalizationScope.Shared Then _manager.Personalization.ToggleScope() End If End Sub ' If not in Shared scope, and if user is allowed, toggle the scope. Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, _ ByVal e As EventArgs) If _manager.Personalization.CanEnterSharedScope AndAlso _ _manager.Personalization.Scope = PersonalizationScope.User Then _manager.Personalization.ToggleScope() End If End Sub </script> <div> <asp:Panel ID="Panel1" runat="server" Borderwidth="1" Width="230" BackColor="lightgray" Font-Names="Verdana, Arial, Sans Serif" > <asp:Label ID="Label1" runat="server" Text=" Display Mode" Font-Bold="true" Font-Size="8" Width="120" /> <asp:DropDownList ID="DisplayModeDropdown" runat="server" AutoPostBack="true" Width="120" OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" /> <asp:LinkButton ID="LinkButton1" runat="server" Text="Reset User State" ToolTip="Reset the current user's personalization data for the page." Font-Size="8" OnClick="LinkButton1_Click" /> <asp:Panel ID="Panel2" runat="server" GroupingText="Personalization Scope" Font-Bold="true" Font-Size="8" Visible="false" > <asp:RadioButton ID="RadioButton1" runat="server" Text="User" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" /> <asp:RadioButton ID="RadioButton2" runat="server" Text="Shared" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton2_CheckedChanged" /> </asp:Panel> </asp:Panel> </div>
<%@ control language="C#" classname="DisplayModeMenuCS"%> <script runat="server"> // Use a field to reference the current WebPartManager. WebPartManager _manager; void Page_Init(object sender, EventArgs e) { Page.InitComplete += new EventHandler(InitComplete); } void InitComplete(object sender, System.EventArgs e) { _manager = WebPartManager.GetCurrentWebPartManager(Page); String browseModeName = WebPartManager.BrowseDisplayMode.Name; // Fill the dropdown with the names of supported display modes. foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes) { String modeName = mode.Name; // Make sure a mode is enabled before adding it. if (mode.IsEnabled(_manager)) { ListItem item = new ListItem(modeName, modeName); DisplayModeDropdown.Items.Add(item); } } // If shared scope is allowed for this user, display the scope-switching // UI and select the appropriate radio button for the current user scope. if (_manager.Personalization.CanEnterSharedScope) { Panel2.Visible = true; if (_manager.Personalization.Scope == PersonalizationScope.User) RadioButton1.Checked = true; else RadioButton2.Checked = true; } } // Change the page to the selected display mode. void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e) { String selectedMode = DisplayModeDropdown.SelectedValue; WebPartDisplayMode mode = _manager.SupportedDisplayModes[selectedMode]; if (mode != null) _manager.DisplayMode = mode; } // Set the selected item equal to the current display mode. void Page_PreRender(object sender, EventArgs e) { ListItemCollection items = DisplayModeDropdown.Items; int selectedIndex = items.IndexOf(items.FindByText(_manager.DisplayMode.Name)); DisplayModeDropdown.SelectedIndex = selectedIndex; } // Reset all of a user's personalization data for the page. protected void LinkButton1_Click(object sender, EventArgs e) { _manager.Personalization.ResetPersonalizationState(); } // If not in User personalization scope, toggle into it. protected void RadioButton1_CheckedChanged(object sender, EventArgs e) { if (_manager.Personalization.Scope == PersonalizationScope.Shared) _manager.Personalization.ToggleScope(); } // If not in Shared scope, and if user is allowed, toggle the scope. protected void RadioButton2_CheckedChanged(object sender, EventArgs e) { if (_manager.Personalization.CanEnterSharedScope && _manager.Personalization.Scope == PersonalizationScope.User) _manager.Personalization.ToggleScope(); } </script> <div> <asp:Panel ID="Panel1" runat="server" Borderwidth="1" Width="230" BackColor="lightgray" Font-Names="Verdana, Arial, Sans Serif" > <asp:Label ID="Label1" runat="server" Text=" Display Mode" Font-Bold="true" Font-Size="8" Width="120" /> <asp:DropDownList ID="DisplayModeDropdown" runat="server" AutoPostBack="true" Width="120" OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" /> <asp:LinkButton ID="LinkButton1" runat="server" Text="Reset User State" ToolTip="Reset the current user's personalization data for the page." Font-Size="8" OnClick="LinkButton1_Click" /> <asp:Panel ID="Panel2" runat="server" GroupingText="Personalization Scope" Font-Bold="true" Font-Size="8" Visible="false" > <asp:RadioButton ID="RadioButton1" runat="server" Text="User" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" /> <asp:RadioButton ID="RadioButton2" runat="server" Text="Shared" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton2_CheckedChanged" /> </asp:Panel> </asp:Panel> </div>
コード例の 2 番目の部分は Web ページです。ページの先頭には 2 つの register ディレクティブがあります。1 つはユーザー コントロール用で、もう 1 つは、2 つのカスタム WebPart コントロールを格納しているコンパイル済みコンポーネント用です。このトピックの「解説」セクションに記述されているように、ページには、宣言要素の適切な階層内に入れ子になった PageCatalogPart コントロールへの宣言参照があります。また、<asp:declarativecatalogpart> 要素もあります。これは、標準 ASP.NET Calendar コントロールの参照、および 2 つのカスタム WebPart コントロールを格納します。これらはすべてユーザーがカタログから選択できるコントロールです。
<%@ page language="VB" %> <%@ register TagPrefix="uc1" TagName="DisplayModeMenuVB" Src="DisplayModeMenuVB.ascx" %> <%@ register tagprefix="aspSample" Namespace="Samples.AspNet.VB.Controls" Assembly="UserInfoWebPartVB" %> <html> <head id="Head1" runat="server"> <title> PageCatalogPart Control </title> </head> <body> <form id="form1" runat="server"> <asp:webpartmanager id="WebPartManager1" runat="server" /> <uc1:DisplayModeMenuVB ID="DisplayModeMenu1" runat="server" /> <asp:webpartzone id="zone1" runat="server" > <PartTitleStyle BorderWidth=1 Font-Names="Verdana, Arial" Font-Size="110%" BackColor="LightBlue" /> <zonetemplate> <asp:BulletedList ID="BulletedList1" Runat="server" DisplayMode="HyperLink" Title="Favorites"> <asp:ListItem Value="http://msdn.microsoft.com"> MSDN </asp:ListItem> <asp:ListItem Value="http://www.asp.net"> ASP.NET </asp:ListItem> <asp:ListItem Value="http://www.msn.com"> MSN </asp:ListItem> </asp:BulletedList> </zonetemplate> </asp:webpartzone> <asp:CatalogZone ID="CatalogZone1" runat="server"> <ZoneTemplate> <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" Title="My Page Catalog" ChromeType="TitleOnly" /> <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server" Description="Contains a user control with Web Parts and an ASP.NET Calendar control."> <WebPartsTemplate> <asp:Calendar ID="Calendar1" runat="server" Title="My Calendar" Description="ASP.NET Calendar control used as a personal calendar." /> <aspSample:UserInfoWebPart runat="server" id="userinfo1" title = "User Information WebPart" Description ="Contains custom, editable user information for display on a page." /> <aspSample:TextDisplayWebPart runat="server" id="TextDisplayWebPart1" title = "Text Display WebPart" Description="Contains a label that users can dynamically update." /> </WebPartsTemplate> </asp:DeclarativeCatalogPart> </ZoneTemplate> </asp:CatalogZone> </form> </body> </html>
<%@ page language="c#" %> <%@ register TagPrefix="uc1" TagName="DisplayModeMenuCS" Src="DisplayModeMenuCS.ascx" %> <%@ register tagprefix="aspSample" Namespace="Samples.AspNet.CS.Controls" Assembly="UserInfoWebPartCS" %> <html> <head id="Head1" runat="server"> <title> PageCatalogPart Control </title> </head> <body> <form id="form1" runat="server"> <asp:webpartmanager id="WebPartManager1" runat="server" /> <uc1:DisplayModeMenuCS ID="DisplayModeMenu1" runat="server" /> <asp:webpartzone id="zone1" runat="server" > <PartTitleStyle BorderWidth=1 Font-Names="Verdana, Arial" Font-Size="110%" BackColor="LightBlue" /> <zonetemplate> <asp:BulletedList ID="BulletedList1" Runat="server" DisplayMode="HyperLink" Title="Favorites"> <asp:ListItem Value="http://msdn.microsoft.com"> MSDN </asp:ListItem> <asp:ListItem Value="http://www.asp.net"> ASP.NET </asp:ListItem> <asp:ListItem Value="http://www.msn.com"> MSN </asp:ListItem> </asp:BulletedList> </zonetemplate> </asp:webpartzone> <asp:CatalogZone ID="CatalogZone1" runat="server"> <ZoneTemplate> <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" Title="My Page Catalog" ChromeType="Titleonly" /> <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server" Description="Contains a user control with Web Parts and an ASP.NET Calendar control."> <WebPartsTemplate> <asp:Calendar ID="Calendar1" runat="server" Title="My Calendar" Description="ASP.NET Calendar control used as a personal calendar." /> <aspSample:UserInfoWebPart runat="server" id="userinfo1" title = "User Information WebPart" Description ="Contains custom, editable user information for display on a page." /> <aspSample:TextDisplayWebPart runat="server" id="TextDisplayWebPart1" title = "Text Display WebPart" Description="Contains a label that users can dynamically update." /> </WebPartsTemplate> </asp:DeclarativeCatalogPart> </ZoneTemplate> </asp:CatalogZone> </form> </body> </html>
コード例の 3 番目の部分は、2 つの WebPart コントロールのソース コードです。コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。両方のコンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
Imports System Imports System.Collections Imports System.ComponentModel Imports System.Drawing Imports System.Security.Permissions Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts Namespace Samples.AspNet.VB.Controls <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermission(SecurityAction.InheritanceDemand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public Class UserInfoWebPart Inherits WebPart Private server As HttpServerUtility = HttpContext.Current.Server Private _userNickName As String = "Add a nickname." Private _userPetName As String = "Add a pet's name." Private _userSpecialDate As DateTime = DateTime.Now Private _userIsCurrent As [Boolean] = True Private _userJobType As JobTypeName = JobTypeName.Unselected Public Enum JobTypeName Unselected = 0 Support = 1 Service = 2 Professional = 3 Technical = 4 Manager = 5 Executive = 6 End Enum Private NickNameLabel As Label Private PetNameLabel As Label Private SpecialDateLabel As Label Private IsCurrentCheckBox As CheckBox Private JobTypeLabel As Label ' Add the Personalizable and WebBrowsable attributes to the ' public properties, so that users can save property values ' and edit them with a PropertyGridEditorPart control. <Personalizable(), WebBrowsable(), WebDisplayName("Nickname")> _ Public Property NickName() As String Get Dim o As Object = ViewState("NickName") If Not (o Is Nothing) Then Return CStr(o) Else Return _userNickName End If End Get Set(ByVal value As String) _userNickName = server.HtmlEncode(value) End Set End Property <Personalizable(), WebBrowsable(), WebDisplayName("Pet Name")> _ Public Property PetName() As String Get Dim o As Object = ViewState("PetName") If Not (o Is Nothing) Then Return CStr(o) Else Return _userPetName End If End Get Set(ByVal value As String) _userPetName = server.HtmlEncode(value) End Set End Property <Personalizable(), WebBrowsable(), WebDisplayName("Special Day")> _ Public Property SpecialDay() As DateTime Get Dim o As Object = ViewState("SpecialDay") If Not (o Is Nothing) Then Return CType(o, DateTime) Else Return _userSpecialDate End If End Get Set(ByVal value As DateTime) _userSpecialDate = value End Set End Property <Personalizable(), WebBrowsable(), WebDisplayName("Job Type")> _ Public Property UserJobType() As JobTypeName Get Dim o As Object = ViewState("UserJobType") If Not (o Is Nothing) Then Return CType(o, JobTypeName) Else Return _userJobType End If End Get Set(ByVal value As JobTypeName) _userJobType = CType(value, JobTypeName) End Set End Property <Personalizable(), WebBrowsable(), WebDisplayName("Is Current")> _ Public Property IsCurrent() As [Boolean] Get Dim o As Object = ViewState("IsCurrent") If Not (o Is Nothing) Then Return CType(o, [Boolean]) Else Return _userIsCurrent End If End Get Set(ByVal value As [Boolean]) _userIsCurrent = value End Set End Property Protected Overrides Sub CreateChildControls() Controls.Clear() NickNameLabel = New Label() NickNameLabel.Text = Me.NickName SetControlAttributes(NickNameLabel) PetNameLabel = New Label() PetNameLabel.Text = Me.PetName SetControlAttributes(PetNameLabel) SpecialDateLabel = New Label() SpecialDateLabel.Text = Me.SpecialDay.ToShortDateString() SetControlAttributes(SpecialDateLabel) IsCurrentCheckBox = New CheckBox() IsCurrentCheckBox.Checked = Me.IsCurrent SetControlAttributes(IsCurrentCheckBox) JobTypeLabel = New Label() JobTypeLabel.Text = Me.UserJobType.ToString() SetControlAttributes(JobTypeLabel) ChildControlsCreated = True End Sub Private Sub SetControlAttributes(ByVal ctl As WebControl) ctl.BackColor = Color.White ctl.BorderWidth = 1 ctl.Width = 200 Me.Controls.Add(ctl) End Sub Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter) writer.Write("Nickname:") writer.WriteBreak() NickNameLabel.RenderControl(writer) writer.WriteBreak() writer.Write("Pet Name:") writer.WriteBreak() PetNameLabel.RenderControl(writer) writer.WriteBreak() writer.Write("Special Date:") writer.WriteBreak() SpecialDateLabel.RenderControl(writer) writer.WriteBreak() writer.Write("Job Type:") writer.WriteBreak() JobTypeLabel.RenderControl(writer) writer.WriteBreak() writer.Write("Current:") writer.WriteBreak() IsCurrentCheckBox.RenderControl(writer) End Sub End Class <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermission(SecurityAction.InheritanceDemand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public Class TextDisplayWebPart Inherits WebPart Private _contentText As String = Nothing Private _fontStyle As String = Nothing Private input As TextBox Private DisplayContent As Label Private lineBreak As Literal <Personalizable(), WebBrowsable()> _ Public Property ContentText() As String Get Return _contentText End Get Set(ByVal value As String) _contentText = value End Set End Property Protected Overrides Sub CreateChildControls() Controls.Clear() DisplayContent = New Label() DisplayContent.BackColor = Color.LightBlue DisplayContent.Text = Me.ContentText Me.Controls.Add(DisplayContent) lineBreak = New Literal() lineBreak.Text = "<br />" Controls.Add(lineBreak) input = New TextBox() Me.Controls.Add(input) Dim update As New Button() update.Text = "Set Label Content" AddHandler update.Click, AddressOf Me.submit_Click Me.Controls.Add(update) End Sub Private Sub submit_Click(ByVal sender As Object, _ ByVal e As EventArgs) ' Update the label string. If input.Text <> String.Empty Then _contentText = input.Text + "<br />" input.Text = String.Empty DisplayContent.Text = Me.ContentText End If End Sub End Class End Namespace
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Security.Permissions; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; namespace Samples.AspNet.CS.Controls { [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class UserInfoWebPart : WebPart { HttpServerUtility server = HttpContext.Current.Server; private String _userNickName = "Add a nickname."; private String _userPetName = "Add a pet's name."; private DateTime _userSpecialDate = DateTime.Now; private Boolean _userIsCurrent = true; private JobTypeName _userJobType = JobTypeName.Unselected; public enum JobTypeName { Unselected = 0, Support = 1, Service = 2, Professional = 3, Technical = 4, Manager = 5, Executive = 6 } Label NickNameLabel; Label PetNameLabel; Label SpecialDateLabel; CheckBox IsCurrentCheckBox; Label JobTypeLabel; // Add the Personalizable and WebBrowsable attributes to the // public properties, so that users can save property values // and edit them with a PropertyGridEditorPart control. [Personalizable(), WebBrowsable, WebDisplayName("Nickname")] public String NickName { get { object o = ViewState["NickName"]; if (o != null) return (string)o; else return _userNickName; } set { _userNickName = server.HtmlEncode(value); } } [Personalizable(), WebBrowsable, WebDisplayName("Pet Name")] public String PetName { get { object o = ViewState["PetName"]; if (o != null) return (string)o; else return _userPetName; } set { _userPetName = server.HtmlEncode(value); } } [Personalizable(), WebBrowsable(), WebDisplayName("Special Day")] public DateTime SpecialDay { get { object o = ViewState["SpecialDay"]; if (o != null) return (DateTime)o; else return _userSpecialDate; } set { _userSpecialDate = value; } } [Personalizable(), WebBrowsable(), WebDisplayName("Job Type")] public JobTypeName UserJobType { get { object o = ViewState["UserJobType"]; if (o != null) return (JobTypeName)o; else return _userJobType; } set { _userJobType = (JobTypeName)value; } } [Personalizable(), WebBrowsable(), WebDisplayName("Is Current")] public Boolean IsCurrent { get { object o = ViewState["IsCurrent"]; if (o != null) return (Boolean)o; else return _userIsCurrent; } set { _userIsCurrent = value; } } protected override void CreateChildControls() { Controls.Clear(); NickNameLabel = new Label(); NickNameLabel.Text = this.NickName; SetControlAttributes(NickNameLabel); PetNameLabel = new Label(); PetNameLabel.Text = this.PetName; SetControlAttributes(PetNameLabel); SpecialDateLabel = new Label(); SpecialDateLabel.Text = this.SpecialDay.ToShortDateString(); SetControlAttributes(SpecialDateLabel); IsCurrentCheckBox = new CheckBox(); IsCurrentCheckBox.Checked = this.IsCurrent; SetControlAttributes(IsCurrentCheckBox); JobTypeLabel = new Label(); JobTypeLabel.Text = this.UserJobType.ToString(); SetControlAttributes(JobTypeLabel); ChildControlsCreated = true; } private void SetControlAttributes(WebControl ctl) { ctl.BackColor = Color.White; ctl.BorderWidth = 1; ctl.Width = 200; this.Controls.Add(ctl); } protected override void RenderContents(HtmlTextWriter writer) { writer.Write("Nickname:"); writer.WriteBreak(); NickNameLabel.RenderControl(writer); writer.WriteBreak(); writer.Write("Pet Name:"); writer.WriteBreak(); PetNameLabel.RenderControl(writer); writer.WriteBreak(); writer.Write("Special Date:"); writer.WriteBreak(); SpecialDateLabel.RenderControl(writer); writer.WriteBreak(); writer.Write("Job Type:"); writer.WriteBreak(); JobTypeLabel.RenderControl(writer); writer.WriteBreak(); writer.Write("Current:"); writer.WriteBreak(); IsCurrentCheckBox.RenderControl(writer); } } [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class TextDisplayWebPart : WebPart { private String _contentText = null; TextBox input; Label DisplayContent; Literal lineBreak; [Personalizable(), WebBrowsable] public String ContentText { get { return _contentText; } set { _contentText = value; } } protected override void CreateChildControls() { Controls.Clear(); DisplayContent = new Label(); DisplayContent.BackColor = Color.LightBlue; DisplayContent.Text = this.ContentText; this.Controls.Add(DisplayContent); lineBreak = new Literal(); lineBreak.Text = @"<br />"; Controls.Add(lineBreak); input = new TextBox(); this.Controls.Add(input); Button update = new Button(); update.Text = "Set Label Content"; update.Click += new EventHandler(this.submit_Click); this.Controls.Add(update); } private void submit_Click(object sender, EventArgs e) { // Update the label string. if (input.Text != String.Empty) { _contentText = input.Text + @"<br />"; input.Text = String.Empty; DisplayContent.Text = this.ContentText; } } } }
ブラウザでページを読み込む場合は、[Display Mode] ドロップダウン リスト コントロールの [Catalog Mode] を選択して、カタログ モードに切り替えます。カタログ モードでは、ページへの追加が可能なコントロールを表示できます。いずれかのコントロールを追加し、[Display Mode] ドロップダウン リスト コントロールを使用して、ページをブラウズ モードに戻します。いずれかのコントロールのタイトル バーで動詞メニュー (下向きの矢印) をクリックし、[閉じる] をクリックしてコントロールを終了します。ページをカタログ モードに戻します。終了したコントロールが、ページ カタログに表示され、ページに戻すことができる状態になっています。
System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.Panel
System.Web.UI.WebControls.WebParts.Part
System.Web.UI.WebControls.WebParts.CatalogPart
System.Web.UI.WebControls.WebParts.PageCatalogPart
プラットフォーム
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- PageCatalogPart クラスのページへのリンク