我在我的数据网格上创建了一个右键单击复制选项,但它似乎没有复制单元格中的内容。有什么理由为什么会这样?我注意到当用户已经在剪贴板中有东西时会发生这种情况。
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
using (ContextMenu m = new ContextMenu())
{
MenuItem mItem = new MenuItem("Copy");
m.MenuItems.Add(mItem);
DataGridView.HitTestInfo information = dataGridView1.HitTest(e.X, e.Y);
try
{
dataGridView1.CurrentCell = dataGridView1.Rows[information.RowIndex].Cells[information.ColumnIndex];
m.Show(dataGridView1, new Point(e.X, e.Y));
mItem.Click += mItem_Click;
}
catch (Exception)
{
}
}
}
}
void mItem_Click(object sender, EventArgs e)
{
Clipboard.SetText(dataGridView1.CurrentCell.Value.ToString());
}
答案 0 :(得分:2)
也许这对你的情况不起作用,但这就是我要做的事情(这看起来像WinForms)。
在表单中添加ContextMenuStrip
。
将“复制”菜单项添加到上下文菜单中,并订阅该项目的点击事件。
将以下代码放在click事件中(如果.Value
为null,则Convert.ToString()返回空字符串,而.ToString()将抛出异常):
Clipboard.SetText(Convert.ToString(dataGridView1.CurrentCell.Value));
通过网格DataGridView
属性将其附加到ContextMenuStrip
。
要仅对单元格执行此操作,请执行命中测试以确定单击网格的哪个部分,然后使用结果允许或取消打开上下文菜单。
private bool isCellClicked = false;
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
var hit = dataGridView1.HitTest(e.X, e.Y);
isCellClicked = (hit.Type == DataGridViewHitTestType.Cell);
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
e.Cancel = !isCellClicked;
}