自己做出VS.NET风格的右键菜单

本文介绍如何创建VS.NET风格的右键菜单,通过自定义菜单项类,实现菜单的绘制与尺寸设置,包括菜单项的文字显示及不同状态下的背景与边框样式。

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

自己做出VS.NET风格的右键菜单(简单,实用)
此主题相关图片如下:class MyMenuItem : System.Windows.Forms.MenuItem
{
public MyMenuItem()
{
//这里很重要,必须把OwerDraw设为true,这样可以自己画菜单,否则便是让操作系统画菜单了,默认的是false
this.OwnerDraw=true;
}
protected override void OnDrawItem(SysDrawItemEventArgs e)
{
//要重画菜单,是没有OnPaint方法重载的,只有重载OnDrawItem方法!
Graphics g=e.Graphics;
g.SmoothingMode=SmoothingMode.AntiAlias;//抗锯齿
Font f = new Font(FontFamily.GenericSerif, 12, FontStyle.Regular, GraphicsUnit.Pixel);//设定菜单的字体
Pen p=new Pen(Color.Navy,1);//这是画边框的字体

if(e.State==DrawItemState.NoAccelerator)//一开始右键单击出现菜单,但是鼠标并没有移上去
{ //用白色的底色
g.FillRectangle(Brushes.WhiteSmoke,e.Bounds.X-2,e.Bounds.Y-2,121,23);
}
//鼠标移上去,但是并没有单击
if ((e.State & DrawItemState.Selected)==DrawItemState.Selected)
{
//花边框和底色
g.FillRectangle(Brushes.LightSteelBlue,e.Bounds.X,e.Bounds.Y,109,20);
g.DrawLine(p,e.Bounds.X,e.Bounds.Y,e.Bounds.X,e.Bounds.Y+19);
g.DrawLine(p,e.Bounds.X,e.Bounds.Y+19,e.Bounds.X+109,e.Bounds.Y+19);
g.DrawLine(p,e.Bounds.X+109,e.Bounds.Y+19,e.Bounds.X+109,e.Bounds.Y);
g.DrawLine(p,e.Bounds.X+109,e.Bounds.Y,e.Bounds.X,e.Bounds.Y);
}
//显示文字
g.DrawString(this.Text,f,Brushes.Black,e.Bounds.X,e.Bounds.Y);
g.Dispose();
}
//这是很重要的,这给你的菜单定义了大小,高20,宽100,否则你的菜单什么也看不到
protected override void OnMeasureItem(MeasureItemEventArgs e)
{
e.ItemHeight=20;
e.ItemWidth=100;
}
}
说明:这里我没有画按钮按下时的样子(懒:),主要是以后进一步改进),当然也没有画图标,也是为了以后改进,这只是一个初步的形态,大家看看有什么更高的方法?! 
 
在VB.NET中,可以通过以下步骤为DataGridView添加右键菜单: 1. 首先,在窗体上拖放一个ContextMenuStrip控件,此控件将作为右键菜单的容器。 2. 双击ContextMenuStrip控件,进入其事件处理程序。 3. 在事件处理程序中,可以为右键菜单添加各种菜单项。例如,可以添加一个名为"删除"的菜单项。 4. 在DataGridView控件的属性窗口中,找到ContextMenuStrip属性,并将其值设置为上一步中创建的ContextMenuStrip控件。 5. 编写删除数据的代码。在"删除"菜单项的"Click"事件处理程序中,使用DataGridView的SelectedRows属性来获取选中的行,然后使用DataGridView的Rows.Remove方法从DataGridView中删除这些行。 下面是一个简单的示例代码: ' 添加右键菜单的事件处理程序 Private Sub contextMenuStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles contextMenuStrip1.ItemClicked ' 获取选中的行 Dim selectedRows As DataGridViewSelectedRowCollection = dataGridView1.SelectedRows ' 遍历选中的行并删除 For Each row As DataGridViewRow In selectedRows dataGridView1.Rows.Remove(row) Next End Sub 请注意,上面的代码中的"dataGridView1"是指DataGridView控件的名称,请根据实际情况修改。 通过以上步骤,您可以为DataGridView添加一个简单的右键菜单,在右键单击DataGridView时,弹出该菜单,并可以选择"删除"菜单项来删除选中的行。您可以根据需要添加其他菜单项,并在相应的事件处理程序中编写相关代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值