CLR自定义菜单项(ToolStripItem)

本文介绍如何创建一个自定义的 ToolStripColor 菜单项,该菜单项继承自 ToolStripControlHost,并利用自定义的颜色设置控件 SelfColorControl 实现颜色选择功能。通过简单实例展示了如何将自定义菜单项添加到 WinForm 应用程序的上下文菜单中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建ToolStripColor.h

让类ToolStripColor继承自ToolStripControlHost实现,则ToolStripColor的对象并可以作为一个MenuItem添加到一个菜单中了

示例代码如下(此代码是基于上一个随笔中自定义的颜色设置控件实现):


  
#pragma once

#include
< string >

namespace TestDIYMenuItem {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace SelfColorControl;

/// <summary>
/// WinForm自定义菜单项:颜色设置菜单
/// </summary>
/// <remarks>
/// 基于自定义UserControl:SelfColorControl.dll
/// </remarks>
public ref class ToolStripColor : public System::Windows::Forms::ToolStripControlHost
{
public :
/// <summary>
/// 事件回调委托类型
/// </summary>
delegate void ValueChangedHandler( void );
/// <summary>
/// 时间回调句柄
/// </summary>
event ValueChangedHandler ^ pCallBack;

public :
ToolStripColor() : ToolStripControlHost(CreateControlInstance())
{
InitializeComponent();
}

ToolStripColor(std::
string name): ToolStripControlHost(CreateControlInstance())
{
this -> Name = " asdf " ;
InitializeComponent();
}

public :
/// <summary>
/// 获取当前值
/// </summary>
System::Drawing::Color GetValue()
{
return colorCtrl -> CurValue;
}

/// <summary>
/// 设置当前值
/// </summary>
void SetValue(System::Drawing::Color color)
{
colorCtrl
-> CurValue = color;
}

private :
static SelfColorControl::ColorControl ^ colorCtrl = gcnew SelfColorControl::ColorControl();

static System::Windows::Forms::Control ^ CreateControlInstance()
{
colorCtrl
-> AutoSize = false ;
return colorCtrl;
}

void InitializeComponent( void )
{
colorCtrl
-> ValueChanged += gcnew ColorControl::ColorValueChangedHandler( this , & ToolStripColor::colorCtrl_ValueChanged);
this -> AutoSize = false ;
}

// <summary>
/// 手动添加,自定义控件SelfColorControl的ValueChanged响应函数
/// </summary>
void colorCtrl_ValueChanged(System::Object ^ object , System::EventArgs ^ e)
{
// 自定义事件回调
pCallBack();
}
};


}

这样定义的自定义菜单项使用起来比较简单:

//定义一个新的菜单项,TestDIYMenuItem是ToolStripColor的命名空间,如上述代码所示

private:TestDIYMenuItem::ToolStripColor^ toolStripColor;

//new一个菜单项

this->toolStripColor = (gcnew TestDIYMenuItem::ToolStripColor());

//将新建的颜色菜单项加入菜单对象

contextMenuStrip1->Items->Add(toolStripColor);

相关参考:http://blog.163.com/elgyin@126/blog/static/1894262020105290143261/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值