WebPartManager.CloseWebPart メソッド
アセンブリ: System.Web (system.web.dll 内)



CloseWebPart メソッドは、WebPart コントロールまたはその他のサーバー コントロールを削除し、こうしたコントロールが、組み込まれていた元の Web ページ上に表示されないようにします。終了したコントロールは、PageCatalogPart オブジェクトに追加されます。このオブジェクトは、終了したコントロールへの参照を保持し、そのコントロールをページに復元できるようにします。終了した WebPart コントロールは、WebParts プロパティで参照されるコレクションに引き続き表示されます。
コントロールの終了は削除とは異なります。終了したコントロールはページに復元すると引き続き使用できますが、削除したコントロール インスタンスは完全に削除されるため復元できません。WebPart コントロールまたはサーバー コントロールが静的 (ページのマークアップに宣言) かまたは動的 (プログラムでページに追加するかまたはユーザーが Web パーツ カタログから追加) かに関係なく、コントロールを終了して再びページ上に開くことができます。
通常、ユーザーは、WebPart コントロールの動詞メニューをクリックし、Close 動詞を選択して、こうしたコントロールを終了できます。また、コントロールは、CloseWebPart メソッドを直接呼び出して、それに webPart への参照を渡すことにより終了することもできます。
WebPart コントロールを終了したページ上で、開発者が <asp:catalogzone> 要素を宣言し、その内部に <asp:pagecatalogpart> 要素を追加すると、実行時に、終了したコントロールをページに復元する簡単なユーザー インターフェイス (UI) が表示されます。ユーザーは、ページをカタログ表示モードに切り替えることができます。これにより、終了したコントロールがページ カタログ内に表示されます。ユーザーが、終了したコントロールを選択してページの任意の位置に戻すと、選択したコントロールがページに復元され、通常どおり表示できます。
CloseWebPart メソッドが呼び出されると、WebPartClosing、SelectedWebPartChanging (複数のコントロールがある場合)、WebPartsDisconnecting (接続コントロールがある場合) など、複数のイベントが発生します。通常、開発者はこれらのイベントをキャンセルできますが、特定の場合ではキャンセルできません。詳細については、WebPartClosing、SelectedWebPartChanging、および WebPartsDisconnecting の各イベントのドキュメントを参照してください。

CloseWebPart メソッドを使用する方法を次のコード例に示します。
コード例の最初の部分は、表示モードを変更するユーザー コントロールです。このユーザー コントロールのソース コードは、WebPartManager クラスの概要の「例」から取得できます。表示モードの詳細およびユーザー コントロールの動作方法の詳細については、「チュートリアル : Web パーツ ページでの表示モードの変更」を参照してください。
コード例の 2 番目の部分はカスタム WebPart コントロールです。コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。この例では、動的コンパイルの方法を使用します。このため、Web ページの先頭にあるこのコントロール用の Register ディレクティブに Assembly 属性はありません。コンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
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 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 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; } } } }
コード例の 3 番目の部分は Web ページです。このページには CatalogZone ゾーンが含まれ、その内部に <asp:pagecatalogpart> 要素が宣言されています。終了した WebPart コントロールはここに格納され、ユーザーはそれをページに戻すことができます。Button1_Click メソッドは、CloseWebPart メソッドを直接呼び出し、カスタム WebPart コントロールを終了しますが、ユーザーも動詞メニューを通じてこのコントロールを終了できます。
<%@ Page Language="vb" %> <%@ Register TagPrefix="uc1" TagName="DisplayModeMenuVB" Src="~/DisplayModeMenuVB.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls"%> <script runat="server"> Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) mgr1.CloseWebPart(text1) End Sub </script> <html > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:WebPartManager ID="mgr1" runat="server" /> <uc1:DisplayModeMenuVB ID="menu1" runat="server" /> <asp:WebPartZone ID="WebPartZone1" runat="server"> <ZoneTemplate> <aspSample:TextDisplayWebPart ID="text1" runat="server" Title="My Text WebPart" /> </ZoneTemplate> </asp:WebPartZone> <asp:CatalogZone ID="CatalogZone1" runat="server"> <ZoneTemplate> <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" /> </ZoneTemplate> </asp:CatalogZone> <asp:Button ID="Button1" runat="server" Text="Close WebPart" OnClick="Button1_Click" /> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Register TagPrefix="uc1" TagName="DisplayModeMenuCS" Src="~/DisplayModeMenuCS.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls"%> <script runat="server"> protected void Button1_Click(object sender, EventArgs e) { mgr1.CloseWebPart(text1); } </script> <html > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:WebPartManager ID="mgr1" runat="server" /> <uc1:DisplayModeMenuCS ID="menu1" runat="server" /> <asp:WebPartZone ID="WebPartZone1" runat="server"> <ZoneTemplate> <aspSample:TextDisplayWebPart ID="text1" runat="server" Title="My Text WebPart" /> </ZoneTemplate> </asp:WebPartZone> <asp:CatalogZone ID="CatalogZone1" runat="server"> <ZoneTemplate> <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" /> </ZoneTemplate> </asp:CatalogZone> <asp:Button ID="Button1" runat="server" Text="Close WebPart" OnClick="Button1_Click" /> </form> </body> </html>
ブラウザにページを読み込んだ後、コントロールのヘッダーにある動詞メニュー (矢印記号) をクリックし、[閉じる] をクリックして、カスタム WebPart コントロールを終了します。[Display Mode] ドロップダウン リスト コントロールで [カタログ] を選択して、ページをカタログ モードに変更します。ページ カタログに、終了したコントロールが表示されます。終了したコントロールの横のチェック ボックスをオンにし、[追加] をクリックしてこのコントロールをページに追加します。次に [閉じる] をクリックしてページをブラウズ モードに戻します。コントロールがページ復元されます。今度は [Close WebPart] をクリックして、このコントロールをもう一度終了します。

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- WebPartManager.CloseWebPart メソッドのページへのリンク