	public:
		delegate void Handle#{DelegateName}(
			Convert<#{OriginalTypeName1}>::Type #{ValueName1} ,
			Convert<#{OriginalTypeName2}>::Type #{ValueName2} );
		event Handle#{DelegateName}^ Event#{DelegateName}
		{
			void add(Handle#{DelegateName}^ _value)
			{
				mDelegate#{DelegateName} += _value;
				MMYGUI_CHECK_NATIVE(mNative);
				static_cast<ThisType*>(mNative)->event#{DelegateName} =
					static_cast< MyGUI::delegates::IDelegate2<
						#{OriginalTypeName1} ,
						#{OriginalTypeName2} > *>(
							new Delegate2< Handle#{DelegateName}^ ,
							#{OriginalTypeName1} ,
							#{OriginalTypeName2} >(mDelegate#{DelegateName}) );
			}
			void remove(Handle#{DelegateName}^ _value)
			{
				mDelegate#{DelegateName} -= _value;
				MMYGUI_CHECK_NATIVE(mNative);
				if (mDelegate#{DelegateName} == nullptr)
					static_cast<ThisType*>(mNative)->event#{DelegateName} = nullptr;
				else
					static_cast<ThisType*>(mNative)->event#{DelegateName} =
						static_cast< MyGUI::delegates::IDelegate2<
							#{OriginalTypeName1} ,
							#{OriginalTypeName2} > *>(
								new Delegate2< Handle#{DelegateName}^ ,
									#{OriginalTypeName1} ,
									#{OriginalTypeName2} >(mDelegate#{DelegateName}) );
			}
		}
	private:
		Handle#{DelegateName}^ mDelegate#{DelegateName};
