ComponentEditor Class

 

Provides the base class for a custom component editor.

Namespace:   System.ComponentModel
Assembly:  System (in System.dll)


[HostProtectionAttribute(SecurityAction::LinkDemand, SharedState = true)]
public ref class ComponentEditor abstract 

NameDescription
System_CAPS_protmethodComponentEditor()

Initializes a new instance of the ComponentEditor class.

NameDescription
System_CAPS_pubmethodEditComponent(ITypeDescriptorContext^, Object^)

Edits the component and returns a value indicating whether the component was modified based upon a given context.

System_CAPS_pubmethodEditComponent(Object^)

Edits the component and returns a value indicating whether the component was modified.

System_CAPS_pubmethodEquals(Object^)

Determines whether the specified object is equal to the current object.(Inherited from Object.)

System_CAPS_protmethodFinalize()

Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.)

System_CAPS_pubmethodGetHashCode()

Serves as the default hash function. (Inherited from Object.)

System_CAPS_pubmethodGetType()

Gets the Type of the current instance.(Inherited from Object.)

System_CAPS_protmethodMemberwiseClone()

Creates a shallow copy of the current Object.(Inherited from Object.)

System_CAPS_pubmethodToString()

Returns a string that represents the current object.(Inherited from Object.)

A component editor is used to edit a component as a whole and can be used to implement a user interface similar to that of the property pages. You associate a component editor with a component by using the EditorAttribute attribute.

Notes to Inheritors:

When you inherit from this class, you must override the EditComponent method.

The following code example demonstrates an example ComponentEditor implementation.

#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
#using <System.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::Collections;
using namespace System::Drawing;
using namespace System::IO;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Binary;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::Design;

// This example demonstrates how to implement a component editor that hosts 
// component pages and associate it with a component. This example also 
// demonstrates how to implement a component page that provides a panel-based 
// control system and Help keyword support.

   ref class ExampleComponentEditorPage;

   // The ExampleComponentEditor displays two ExampleComponentEditorPage pages.
   public ref class ExampleComponentEditor: public System::Windows::Forms::Design::WindowsFormsComponentEditor
   {

   protected:
      // This method override returns an type array containing the type of 
      // each component editor page to display.
      virtual array<Type^>^ GetComponentEditorPages() override
      {
         array<Type^>^temp0 = {ExampleComponentEditorPage::typeid,ExampleComponentEditorPage::typeid};
         return temp0;
      }

      // This method override returns the index of the page to display when the 
      // component editor is first displayed.
   protected:
      virtual int GetInitialComponentEditorPageIndex() override
      {
         return 1;
      }
   };

   // This example component editor page type provides an example 
   // ComponentEditorPage implementation.
   private ref class ExampleComponentEditorPage: public System::Windows::Forms::Design::ComponentEditorPage
   {
   private:
      Label^ l1;
      Button^ b1;
      PropertyGrid^ pg1;

      // Base64-encoded serialized image data for the required component editor page icon.
      String^ icon;

   public:
      ExampleComponentEditorPage()
      {
         String^ temp = "AAEAAAD/////AQAAAAAAAAAMAgAAAFRTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj0xLjAuNTAwMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0Y"
         "QhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAD4BAAACAAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIA"
         "AAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgADExAAAgICAAMDAwAA+iPcAY77gACh9kwD/AAAAndPoADpw6wD///8AAAAAAAAAAAAHd3d3d3d3d8IiIiIiIiLHKIiIiIiIiCco///////4Jyj5mfIvIvgnKPn"
         "p////+Cco+en7u7v4Jyj56f////gnKPmZ8i8i+Cco///////4JyiIiIiIiIgnJmZmZmZmZifCIiIiIiIiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACw==";
         icon = temp;

         // Initialize the page, which inherits from Panel, and its controls.
         this->Size = System::Drawing::Size( 400, 250 );
         this->Icon = DeserializeIconFromBase64Text( icon );
         this->Text = "Example Page";
         b1 = gcnew Button;
         b1->Size = System::Drawing::Size( 200, 20 );
         b1->Location = Point(200,0);
         b1->Text = "Set a random background color";
         b1->Click += gcnew EventHandler( this, &ExampleComponentEditorPage::randomBackColor );
         this->Controls->Add( b1 );
         l1 = gcnew Label;
         l1->Size = System::Drawing::Size( 190, 20 );
         l1->Location = Point(4,2);
         l1->Text = "Example Component Editor Page";
         this->Controls->Add( l1 );
         pg1 = gcnew PropertyGrid;
         pg1->Size = System::Drawing::Size( 400, 280 );
         pg1->Location = Point(0,30);
         this->Controls->Add( pg1 );
      }

      // This method indicates that the Help button should be enabled for this 
      // component editor page.
      virtual bool SupportsHelp() override
      {
         return true;
      }

      // This method is called when the Help button for this component editor page is pressed.
      // This implementation uses the IHelpService to show the Help topic for a sample keyword.
   public:
      virtual void ShowHelp() override
      {
         // The GetSelectedComponent method of a ComponentEditorPage retrieves the
         // IComponent associated with the WindowsFormsComponentEditor.
         IComponent^ selectedComponent = this->GetSelectedComponent();

         // Retrieve the Site of the component, and return if null.
         ISite^ componentSite = selectedComponent->Site;
         if ( componentSite == nullptr )
                  return;

         // Acquire the IHelpService to display a help topic using a indexed keyword lookup.
         IHelpService^ helpService = dynamic_cast<IHelpService^>(componentSite->GetService( IHelpService::typeid ));
         if ( helpService != nullptr )
                  helpService->ShowHelpFromKeyword( "System.Windows.Forms.ComboBox" );
      }

   protected:

      // The LoadComponent method is raised when the ComponentEditorPage is displayed.
      virtual void LoadComponent() override
      {
         this->pg1->SelectedObject = this->Component;
      }

      // The SaveComponent method is raised when the WindowsFormsComponentEditor is closing 
      // or the current ComponentEditorPage is closing.
      virtual void SaveComponent() override {}

   private:

      // If the associated component is a Control, this method sets the BackColor to a random color.
      // This method is invoked by the button on this ComponentEditorPage.
      void randomBackColor( Object^ /*sender*/, EventArgs^ /*e*/ )
      {
         if ( System::Windows::Forms::Control::typeid->IsAssignableFrom( this->::Component::GetType() ) )
         {
            // Sets the background color of the Control associated with the
            // WindowsFormsComponentEditor to a random color.
            Random^ rnd = gcnew Random;
            (dynamic_cast<System::Windows::Forms::Control^>(this->Component))->BackColor = Color::FromArgb( rnd->Next( 255 ), rnd->Next( 255 ), rnd->Next( 255 ) );
            pg1->Refresh();
         }
      }

      // This method can be used to retrieve an Icon from a block 
      // of Base64-encoded text.
      System::Drawing::Icon^ DeserializeIconFromBase64Text( String^ text )
      {
         System::Drawing::Icon^ img = nullptr;
         array<Byte>^memBytes = Convert::FromBase64String( text );
         IFormatter^ formatter = gcnew BinaryFormatter;
         MemoryStream^ stream = gcnew MemoryStream( memBytes );
         img = dynamic_cast<System::Drawing::Icon^>(formatter->Deserialize( stream ));
         stream->Close();
         return img;
      }
   };

   // This example control is associated with the ExampleComponentEditor 
   // through the following EditorAttribute.

   [EditorAttribute(ExampleComponentEditor::typeid,ComponentEditor::typeid)]
   public ref class ExampleUserControl: public System::Windows::Forms::UserControl{};

.NET Framework
Available since 1.1

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
Show: