右键菜单
我所做的一部分画面要求在RowHeaderCell上点击鼠标右键时会出现一个右键菜单,
如果每个画面都写同样的程序会很麻烦,
所以有没有可能把它编辑成共同使用的程序 回复 1楼junlingzhu2002的帖子
你可以写一个自定的Cell类型,这个Cell从RowHeaderCell派生,比如说MyRowHeaderCell,在他的构造函数当中把你定义的ContextMenu设置给这个Cell,以后所有的Template当中用到RowHeaderCell的地方,都改成使用这个MyRowHeaderCell,就行了。参考下面的C#代码:
public class MyRowHeaderCell:RowHeaderCell
{
public MyRowHeaderCell()
{
System.Windows.Forms.ContextMenuStrip strip = new System.Windows.Forms.ContextMenuStrip();
strip.Items.Add("This is menu stip item.");
this.ContextMenuStrip = strip;
}
} 谢谢,那strip.Clicked是要写在自己里面是吗 回复 3楼junlingzhu2002的帖子
那要看你的逻辑是不是通用的,如果都不一样,就需要分开写。 如果是一样的,可以写在MyRowHeaderCell里面吗?还是写在哪里呀。
我设定的ContextMenu是,行插入,行删除,复制,粘贴,前行复制
用ContextMenu.ItemClicked事件吗
不好意思,我还是新手,还不太熟练,
可以给一个简单的代码吗 回复 5楼junlingzhu2002的帖子
你可以写一个自定的ContextMenuStrip,比如下面:
class MyRowHeaderContextMenuStrip : ContextMenuStrip
{
private GcMultiRow _gcMultiROw;
private int _rowIndexCache;
public MyRowHeaderContextMenuStrip(GcMultiRow gcMultiRow)
{
_gcMultiROw = gcMultiRow;
_gcMultiROw.CellMouseUp += _gcMultiROw_CellMouseUp;
this.Items.Add("AddRow", null, new EventHandler(OnItemClick));
this.Items.Add("RemoveRow", null, new EventHandler(OnItemClick));
}
void _gcMultiROw_CellMouseUp(object sender, CellMouseEventArgs e)
{
if (e.Scope == CellScope.Row)
{
_rowIndexCache = e.RowIndex;
}
}
private void OnItemClick(object sender, EventArgs e)
{
ToolStripItem item = sender as ToolStripItem;
if (item != null)
{
if (item.Text == "AddRow")
{
_gcMultiROw.Rows.Insert(_rowIndexCache);
}
else if (item.Text == "RemoveRow")
{
_gcMultiROw.Rows.RemoveAt(_rowIndexCache);
}
}
}
}
然后在Form_Loaded事件处理函数当中构造一个自定义的MyRowHeaderContextMenuStrip,设置给对应的RowHeaderCell.ContextMenuStrip属性:
private void Form1_Load(object sender, EventArgs e)
{
//假定Cell0是RowHeaderCell
this.gcMultiRow1.Template.Row.Cells.ContextMenuStrip = this.myRowHeaderContextMenuStrip1;
//重新加载模板
this.gcMultiRow1.Template = this.gcMultiRow1.Template;
}
页:
[1]