次の方法で共有


ControlDesigner クラス

Web サーバー コントロールのデザイン時の動作を拡張するための基本デザイナ クラスを提供します。

この型のすべてのメンバの一覧については、ControlDesigner メンバ を参照してください。

System.Object
   System.ComponentModel.Design.ComponentDesigner
      System.Web.UI.Design.HtmlControlDesigner
         System.Web.UI.Design.ControlDesigner
            派生クラス

Public Class ControlDesigner
   Inherits HtmlControlDesigner
[C#]
public class ControlDesigner : HtmlControlDesigner
[C++]
public __gc class ControlDesigner : public HtmlControlDesigner
[JScript]
public class ControlDesigner extends HtmlControlDesigner

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

ControlDesigner は、継承でき、拡張してカスタム Web フォーム コントロールのデザイン時サポートを提供できる、基本デザイナ クラスを提供します。 ControlDesigner も、デザイナがデザイン時にさまざまな目的に応じて呼び出すことができる、次のメソッドを提供します。

  • AllowResize は、コントロールのサイズを変更できるかどうかを示します。
  • DesignTimeHtmlRequiresLoadComplete は、読み込みの完了前にコントロールの HTML を表示できるかどうかを示します。
  • IsDirty は、コントロールが読み込まれた後、または最後に保存された後に、変更されているかどうかを示します。
  • IsPropertyBound は、指定されたプロパティがデータ連結されているかどうかを示します。
  • ReadOnly は、コントロールが読み取り専用であり、デザイン時に変更できないかどうかを示します。
  • UpdateDesignTimeHtml は、通常はデザイナによって値が変更された後に、コントロールの表示を更新します。

使用例

[Visual Basic, C#, C++] ControlDesigner クラスから派生したデザイナ クラスを作成するコード例を次に示します。このデザイナは、デザイン時にコントロールのテキスト サイズを変更するためのコマンドを提供します。デザイナがサポートするクラスの名前は TextControl です。コントロールは、TextControl クラスの DesignerAttribute メタ タグ宣言でデザイナを指定することにより、デザイナと関連付けられます。

 
Imports System
Imports System.Web.UI
Imports System.Web.UI.Design
Imports System.Web.UI.WebControls
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports Microsoft.VisualBasic

Namespace Examples.AspNet

' This control designer offers designer verb menu commands
' that can alter the design time html provided for the 
' System.Web.UI.Control this designer supports.
Public Class TextSizeWebControlDesigner
    Inherits System.Web.UI.Design.ControlDesigner
    ' Whether to display the html of the associated 
    ' control using a large heading text size.
    Private LargeText As Boolean
    Private dvc As DesignerVerbCollection = Nothing

    Public Sub New()
        LargeText = True
    End Sub

    ' Provides a menu command to toggle the text size.
    Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection
        Get
            Dim verbReduce As DesignerVerb = _
              New DesignerVerb("Reduce text size", New EventHandler(AddressOf Me.toggleTextSize))
            Dim verbEnlarge As DesignerVerb = _
              New DesignerVerb("Enlarge text size", New EventHandler(AddressOf Me.toggleTextSize))
             
            If dvc Is Nothing Then
                dvc = New DesignerVerbCollection()
                dvc.Add(verbReduce)
                dvc.Add(verbEnlarge)
            ElseIf (dvc.Contains(verbEnlarge) = False) Then
                dvc.Add(verbEnlarge)
            ElseIf (dvc.Contains(verbReduce) = False) Then
                dvc.Add(verbReduce)
            End If
 
            If LargeText Then
                dvc.Remove(verbEnlarge)
            Else
                dvc.Remove(verbReduce)
            End If
            Return dvc
        End Get
    End Property

    ' Returns the html to use to represent the control at design time.
    Public Overrides Function GetDesignTimeHtml() As String
        Dim html As String = MyBase.GetDesignTimeHtml()
        

        If LargeText Then
            Return "<H1>" + html + "</H1>"
        Else
            Return "<H3>" + html + "</H3>"
        End If
    End Function

    ' Event handler to toggle whether the html receives a large or 
    ' small size heading markup tag.
    Private Sub ToggleTextSize(ByVal sender As Object, ByVal e As EventArgs)
        If LargeText Then
            LargeText = False
        Else
            LargeText = True
        End If
        Me.IsDirty = True
        Me.UpdateDesignTimeHtml()
    End Sub

End Class

' Simple text Web control renders a text string.
' This control is associated with the TextSizeWebControlDesigner.
<DesignerAttribute(GetType(TextSizeWebControlDesigner), GetType(IDesigner))> _
Public Class TextControl
    Inherits System.Web.UI.WebControls.WebControl
    Private [text_] As String

    <Bindable(True), Category("Appearance"), DefaultValue("")> _
    Public Property [Text]() As String
      Get
         Dim o As Object = ViewState("Text")
         Return IIf(o Is Nothing, String.Empty, CStr(o))
      End Get
      Set
         If HasControls() Then
            Controls.Clear()
         End If
         ViewState("Text") = value
      End Set
    End Property

    Public Sub New()
        [text_] = "Test phrase"
    End Sub

    Protected Overrides Sub RenderContents(ByVal output As HtmlTextWriter)
        output.Write([Text])
    End Sub

End Class

[C#] 
using System;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.ComponentModel.Design;

namespace Examples.AspNet
{    
    // This control designer offers designer verb menu commands
    // that can alter the design time html provided for the 
    // System.Web.UI.Control this designer supports.
    public class TextSizeWebControlDesigner : System.Web.UI.Design.ControlDesigner
    {
        // Whether to display the html of the associated 
        // control using a large heading text size.
        private bool LargeText;
        private DesignerVerbCollection dvc;        

        public TextSizeWebControlDesigner() : base()
        {
            LargeText = true;                  
        }

        // Provides a menu command to toggle the text size.
        public override System.ComponentModel.Design.DesignerVerbCollection Verbs
        {
            get
            {
                DesignerVerb verbReduce = new DesignerVerb("Reduce text size", new EventHandler(this.ToggleTextSize));
                DesignerVerb verbEnlarge = new DesignerVerb("Enlarge text size", new EventHandler(this.ToggleTextSize));
                
                if (dvc == null){     
                    dvc = new DesignerVerbCollection();
                    dvc.Add(verbReduce);
                    dvc.Add(verbEnlarge);
                }        
                else if (dvc.Contains(verbEnlarge) == false){
                    dvc.Add(verbEnlarge);
                }
                else if (dvc.Contains(verbReduce) == false){
                    dvc.Add(verbReduce);
                }                   
                
                if( LargeText )
                    dvc.Remove(verbEnlarge);
                else
                    dvc.Remove(verbReduce);
                return dvc;
            }
        }

        // Returns the html to use to represent the control at design time.
        public override string GetDesignTimeHtml()
        {
            string html = base.GetDesignTimeHtml();

            if( LargeText )
                return "<H1>"+html+"</H1>";
            else
                return "<H3>"+html+"</H3>";                        
        }        

        // Event handler to toggle whether the html receives a large or 
        // small size heading markup tag.
        private void ToggleTextSize(object sender, EventArgs e)
        {
            if( LargeText )
                LargeText = false;
            else
                LargeText = true;
            this.IsDirty = true;
            this.UpdateDesignTimeHtml();
        }        
    }

    // Simple text Web control renders a text string.
    // This control is associated with the TextSizeWebControlDesigner.
    [DesignerAttribute(typeof(TextSizeWebControlDesigner), typeof(IDesigner))]
    public class TextControl : System.Web.UI.WebControls.WebControl
    {

        [Bindable(true),
            Category("Appearance"),
            DefaultValue("")]
        public string Text
        {
                    get
                    {
                        object o = ViewState["Text"];
                        return((o == null) ? String.Empty : (string)o);
                    }

                    set
                    {
                        if (HasControls()) {
                            Controls.Clear();
                        }
                        ViewState["Text"] = value;
                    }
        }

        public TextControl()
        {
            Text = "Test phrase";
        }

    protected override void RenderContents(HtmlTextWriter output)
    {
        output.Write(Text);
    }
    }    
}

[C++] 
#using <mscorlib.dll>
#using <System.dll>
#using <System.Web.dll>
#using <System.Design.dll>
using namespace System;
using namespace System::Web::UI;
using namespace System::Web::UI::Design;
using namespace System::Web::UI::WebControls;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;

// This control designer offers designer verb menu commands
// that can alter the design time html provided for the
// System::Web::UI::Control this designer supports.
public __gc class TextSizeWebControlDesigner : public ControlDesigner {
   // Whether to display the html of the associated
   // control using a large heading text size.
private:
   bool LargeText;

public:
   TextSizeWebControlDesigner() : ControlDesigner() {
      LargeText = true;
   }

   // Provides a menu command to toggle the text size.
public:
   __property System::ComponentModel::Design::DesignerVerbCollection* get_Verbs() {
      DesignerVerbCollection* dvc = new DesignerVerbCollection();
      if (LargeText)
         dvc->Add(new DesignerVerb(S"Reduce text size", 
         new EventHandler(this, &TextSizeWebControlDesigner::ToggleTextSize)));
      else
         dvc->Add(new DesignerVerb(S"Enlarge text size", 
         new EventHandler(this, &TextSizeWebControlDesigner::ToggleTextSize)));
      return dvc;
   }


   // Returns the html to use to represent the control at design time.
public:
   String* GetDesignTimeHtml() {
      String* html = __super::GetDesignTimeHtml();

      if (LargeText)
         return String::Concat(S"<H1> ", html, S"</H1>");
      else
         return String::Concat(S"<H3> ", html, S"</H3>");
   }

   // Event handler to toggle whether the html receives a large or
   // small size heading markup tag.
private:
   void ToggleTextSize(Object* /*sender*/, EventArgs* /*e*/) {
      if (LargeText)
         LargeText = false;
      else
         LargeText = true;
      this->IsDirty = true;
      this->UpdateDesignTimeHtml();
   }
};

// Simple text Web control renders a text string.
// This control is associated with the TextSizeWebControlDesigner.
[DesignerAttribute(__typeof(TextSizeWebControlDesigner), __typeof(IDesigner))]
public __gc class TextControl : public WebControl {
private:
   String* text;

public:
   [Bindable(true),
      Category(S"Appearance"),
      DefaultValue(S"")]
__property String* get_Text() {
         return text;
      }
__property void set_Text(String* value) {
         text = value;
      }


   TextControl() {
      text = S"Test phrase";
   }

protected:
   void Render(HtmlTextWriter* output) {
      output->Write(Text);
   }
};

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Web.UI.Design

プラットフォーム: Windows 2000, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Design (System.Design.dll 内)

参照

ControlDesigner メンバ | System.Web.UI.Design 名前空間 | HtmlControlDesigner