	public:
		delegate void Handle#{DelegateName}(
			Convert<#{OriginalTypeName1}>::Type #{ValueName1} );
		event Handle#{DelegateName}^ Event#{DelegateName}
		{
			void add(Handle#{DelegateName}^ _value)
			{
				bool empty = mDelegate#{DelegateName} == nullptr;

				mDelegate#{DelegateName} += _value;
				MMYGUI_CHECK_NATIVE(mNative);

				if (empty)
					static_cast<ThisType*>(mNative)->event#{DelegateName} +=
						static_cast< MyGUI::delegates::IDelegate1<
							#{OriginalTypeName1} > *>(
								new Delegate1< Handle#{DelegateName}^ ,
								#{OriginalTypeName1} >(mDelegate#{DelegateName}) );
			}
			void remove(Handle#{DelegateName}^ _value)
			{
				mDelegate#{DelegateName} -= _value;
				MMYGUI_CHECK_NATIVE(mNative);
				
				bool empty = mDelegate#{DelegateName} == nullptr;
				
				if (empty)
					static_cast<ThisType*>(mNative)->event#{DelegateName} -=
						static_cast< MyGUI::delegates::IDelegate1<
							#{OriginalTypeName1} > *>(
								new Delegate1< Handle#{DelegateName}^ ,
									#{OriginalTypeName1} >(mDelegate#{DelegateName}) );
			}
		}
	private:
		Handle#{DelegateName}^ mDelegate#{DelegateName};
