EditorPartCollection 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
包含一組 EditorPart 用於編輯控制項屬性 WebPart 、版面、外觀及行為的控制項。 此類別無法獲得繼承。
public ref class EditorPartCollection sealed : System::Collections::ReadOnlyCollectionBase
public sealed class EditorPartCollection : System.Collections.ReadOnlyCollectionBase
type EditorPartCollection = class
inherit ReadOnlyCollectionBase
Public NotInheritable Class EditorPartCollection
Inherits ReadOnlyCollectionBase
- 繼承
範例
以下程式碼範例展示了該 EditorPartCollection 類別的多種使用方式。 此程式碼範例分為四個部分:
一個使用者控制功能,讓你能在網頁部分頁面上更改顯示模式。
一個名為 WebPart的自訂
TextDisplayWebPart控制項類別,該類別在網頁中被引用,並由EditorPart控制項編輯。一個參考控制
TextDisplayWebPart項的網頁,包含EditorZone一個控制項,並在區域中宣告了多個EditorPart來自 Web Parts 控制集的控制項,並包含一些事件驅動的程式碼,用以建立和操作物件。EditorPartCollection說明範例程式碼在瀏覽器載入時是如何運作的。
本程式碼範例的第一部分是使用者控制,允許使用者在網頁上更改顯示模式。 關於顯示模式的詳細資訊及此控制項原始碼的說明,請參閱 「攻略:在網頁零件頁面更改顯示模式」。
<%@ 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);
}
}
}
// 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;
}
void Page_PreRender(object sender, EventArgs e)
{
DisplayModeDropdown.SelectedValue =
_manager.DisplayMode.Name;
}
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="125"
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"
AssociatedControlID="DisplayModeDropdown"/>
<asp:DropDownList ID="DisplayModeDropdown"
runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
</asp:Panel>
</div>
<%@ 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
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
Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs)
DisplayModeDropdown.SelectedValue = _manager.DisplayMode.Name
End Sub
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="125"
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"
AssociatedControlID="DisplayModeDropdown"/>
<asp:DropDownList ID="DisplayModeDropdown"
runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
</asp:Panel>
</div>
程式碼範例的第二部分是控制。TextDisplayWebPart 要執行程式碼範例,你必須編譯這個原始碼。 你可以明確編譯,並將結果組合放到你網站的 Bin 資料夾或全域組合快取中。 或者,你也可以把原始碼放在網站的App_Code資料夾,執行時會動態編譯。 若想了解如何展示兩種編譯方法,請參見《 攻略:開發與使用自訂網頁伺服器控制法》。
請注意,這個控制項有一個名為 ContentText;這個屬性包含使用者在文字框中輸入的值。 當控制項處於編輯模式時,這個自訂屬性可以與標準 WebPart 控制項屬性一起編輯。
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 (!string.IsNullOrEmpty(input.Text))
{
_contentText = input.Text + @"<br />";
input.Text = String.Empty;
DisplayContent.Text = this.ContentText;
}
}
}
}
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
程式碼範例的第三部分是網頁。 請注意該頁面的 <asp:editorzone> 元素包含三個 EditorPart 控制項的宣告。 其中兩個控制項會成為方法執行時EditorPartCollection建立的自訂Button1_Click物件的一部分。
<%@ page language="c#" %>
<%@ register TagPrefix="uc1"
TagName="DisplayModeMenu"
Src="DisplayModecs.ascx" %>
<%@ register tagprefix="aspSample"
Namespace="Samples.AspNet.CS.Controls"
Assembly="TextDisplayWebPartCS" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
ArrayList list = new ArrayList(2);
list.Add(AppearanceEditorPart1);
list.Add(PropertyGridEditorPart1);
// Pass an ICollection object to the constructor.
EditorPartCollection myParts = new EditorPartCollection(list);
foreach (EditorPart editor in myParts)
{
editor.BackColor = System.Drawing.Color.LightBlue;
editor.Description = "My " + editor.DisplayTitle + " editor.";
}
// Use the IndexOf property to locate an EditorPart control.
int propertyGridPart = myParts.IndexOf(PropertyGridEditorPart1);
myParts[propertyGridPart].ChromeType = PartChromeType.TitleOnly;
// Use the Contains method to see if an EditorPart exists.
if(!myParts.Contains(LayoutEditorPart1))
LayoutEditorPart1.BackColor = System.Drawing.Color.LightYellow;
// Use the CopyTo method to create an array of EditorParts.
EditorPart[] partArray = new EditorPart[3];
partArray[0] = LayoutEditorPart1;
myParts.CopyTo(partArray,1);
Label1.Text = "<h3>EditorParts in Custom Array</h3>";
foreach (EditorPart ePart in partArray)
{
Label1.Text += ePart.Title + "<br />";
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>
Text Display WebPart with AppearanceEditorPart
</title>
</head>
<body>
<form id="form1" runat="server">
<asp:webpartmanager id="WebPartManager1" runat="server" />
<uc1:DisplayModeMenu ID="DisplayModeMenu1" runat="server" />
<asp:webpartzone id="zone1" runat="server">
<zonetemplate>
<aspSample:TextDisplayWebPart
runat="server"
id="textwebpart"
title = "Text Content WebPart" />
</zonetemplate>
</asp:webpartzone>
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:AppearanceEditorPart ID="AppearanceEditorPart1"
runat="server" />
<asp:LayoutEditorPart ID="LayoutEditorPart1"
runat="server" />
<asp:PropertyGridEditorPart ID="PropertyGridEditorPart1"
runat="server" />
</ZoneTemplate>
</asp:EditorZone>
<asp:Button ID="Button1" runat="server"
Text="Create EditorPartCollection"
OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="" />
</form>
</body>
</html>
<%@ page language="vb" %>
<%@ register TagPrefix="uc1"
TagName="DisplayModeMenu"
Src="DisplayModevb.ascx" %>
<%@ register tagprefix="aspSample"
Namespace="Samples.AspNet.VB.Controls"
Assembly="TextDisplayWebPartVB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
Dim list As New ArrayList(2)
list.Add(AppearanceEditorPart1)
list.Add(PropertyGridEditorPart1)
' Pass an ICollection object to the constructor.
Dim myParts As New EditorPartCollection(list)
Dim editor As EditorPart
For Each editor In myParts
editor.BackColor = System.Drawing.Color.LightBlue
editor.Description = "My " + editor.DisplayTitle + " editor."
Next editor
' Use the IndexOf property to locate an EditorPart control.
Dim propertyGridPart As Integer = _
myParts.IndexOf(PropertyGridEditorPart1)
myParts(propertyGridPart).ChromeType = PartChromeType.TitleOnly
' Use the Contains method to see if an EditorPart exists.
If Not myParts.Contains(LayoutEditorPart1) Then
LayoutEditorPart1.BackColor = System.Drawing.Color.LightYellow
End If
' Use the CopyTo method to create an array of EditorParts.
Dim partArray(2) As EditorPart
partArray(0) = LayoutEditorPart1
myParts.CopyTo(partArray, 1)
Label1.Text = "<h3>EditorParts in Custom Array</h3>"
Dim ePart As EditorPart
For Each ePart In partArray
Label1.Text += ePart.Title + "<br />"
Next ePart
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>
Text Display WebPart with AppearanceEditorPart
</title>
</head>
<body>
<form id="form1" runat="server">
<asp:webpartmanager id="WebPartManager1" runat="server" />
<uc1:DisplayModeMenu ID="DisplayModeMenu1" runat="server" />
<asp:webpartzone id="zone1" runat="server">
<zonetemplate>
<aspSample:TextDisplayWebPart
runat="server"
id="textwebpart"
title = "Text Content WebPart" />
</zonetemplate>
</asp:webpartzone>
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:AppearanceEditorPart ID="AppearanceEditorPart1"
runat="server" />
<asp:LayoutEditorPart ID="LayoutEditorPart1"
runat="server" />
<asp:PropertyGridEditorPart ID="PropertyGridEditorPart1"
runat="server" />
</ZoneTemplate>
</asp:EditorZone>
<asp:Button ID="Button1" runat="server"
Text="Create EditorPartCollection"
OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="" />
</form>
</body>
</html>
當你在瀏覽器載入頁面時,可以透過在顯示模式下拉選單控制項中選擇編輯,將頁面切換到編輯模式。 你可以點擊控制項標題欄 TextDisplayWebPart 的動詞選單(向下箭頭),然後點擊 編輯 來編輯控制項。 當編輯使用者介面(UI)可見時,你可以看到所有 EditorPart 控制項。 你點擊 EditorPart 按鈕,可以看到EditorPartCollection操作該物件的程式碼對控制項產生的影響。 另外,請注意控制 PropertyGridEditorPart 項允許你編輯自訂 TextDisplayWebPart.ContentText 屬性。 這是因為該屬性在控制項的原始碼中標註 WebBrowsable 了屬性。 如果你在編輯介面中更新屬性值,必須將頁面恢復到正常瀏覽模式,才能看到更新 TextDisplayWebPart.ContentText 屬性的效果。
備註
該 EditorPartCollection 類別是一個唯讀的控制項集合 EditorPart ,通常由 EditorZoneBase 區域用來追蹤該區域所包含的 EditorPart 控制項集合。
當網頁部分頁面進入編輯模式,使用者選擇要編輯的控制項時,編輯過程即開始。 該區域會產生一個由該區域所包含的EditorPartCollection控制項組成的新EditorPart物件。 在編輯過程中的不同階段,區域會存取EditorPartCollection物件,以儲存或取得集合中控制項與EditorPart正在編輯控制項之間的WebPart屬性值。
例如,如果你需要對一組EditorPartCollection控制項執行大規模操作,你可以建立EditorPart一組控制項來進行程式化使用。 即使物件 EditorPartCollection 是唯讀,你仍可對集合中參考的底層控制項屬性進行程式化變更。
建構函式
| 名稱 | Description |
|---|---|
| EditorPartCollection() |
初始化一個空的新類別實例 EditorPartCollection 。 |
| EditorPartCollection(EditorPartCollection, ICollection) |
透過傳遞EditorPartCollection一組EditorPartCollection控制項及EditorPart一組額外ICollection控制項,初始化該類別的新EditorPart實例。 |
| EditorPartCollection(ICollection) |
透過傳遞EditorPartCollection一組ICollection控制項來初始化該類別的新EditorPart實例。 |
欄位
| 名稱 | Description |
|---|---|
| Empty |
參考一個靜態、唯讀、空的集合實例。 |
屬性
| 名稱 | Description |
|---|---|
| Count |
取得該實例中包含 ReadOnlyCollectionBase 的元素數量。 (繼承來源 ReadOnlyCollectionBase) |
| InnerList |
取得實例中包含的 ReadOnlyCollectionBase 元素清單。 (繼承來源 ReadOnlyCollectionBase) |
| Item[Int32] |
根據唯一識別碼回傳集合中的特定成員。 |
方法
| 名稱 | Description |
|---|---|
| Contains(EditorPart) |
回傳一個值,指示特定控制項是否在集合中。 |
| CopyTo(EditorPart[], Int32) |
將集合複製到一個 EditorPart 控制陣列。 |
| Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
| GetEnumerator() |
回傳一個枚舉器,會遍歷該 ReadOnlyCollectionBase 實例。 (繼承來源 ReadOnlyCollectionBase) |
| GetHashCode() |
做為預設哈希函式。 (繼承來源 Object) |
| GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
| IndexOf(EditorPart) |
回傳集合中特定成員的位置。 |
| MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
| ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| ICollection.CopyTo(Array, Int32) |
從目標陣列的指定索引開始,將整個 ReadOnlyCollectionBase 複製到相容的一維 Array。 (繼承來源 ReadOnlyCollectionBase) |
| ICollection.IsSynchronized |
取得值,指出對 ReadOnlyCollectionBase 物件的存取是否同步處理 (線程安全)。 (繼承來源 ReadOnlyCollectionBase) |
| ICollection.SyncRoot |
取得對象,這個物件可用來同步存取 ReadOnlyCollectionBase 物件。 (繼承來源 ReadOnlyCollectionBase) |
擴充方法
| 名稱 | Description |
|---|---|
| AsParallel(IEnumerable) |
啟用查詢的平行處理。 |
| AsQueryable(IEnumerable) |
將 IEnumerable 轉換成 IQueryable。 |
| Cast<TResult>(IEnumerable) |
將 IEnumerable 的項目轉換成指定的型別。 |
| OfType<TResult>(IEnumerable) |
根據指定的型別篩選 IEnumerable 的專案。 |