DataGridView 复制 粘贴

1 Ctrl+C Ctrl+V

// 对剪切板内容进行修改

        private void textBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && (e.KeyCode == Keys.V))
            {
                string str = Clipboard.GetText();
                if (str == "")
                {
                    return;
                }
                string[] vals = Regex.Split(str, "\t");
                if (vals.Length <= 1)
                {
                    return;
                }
                if (this.textBox1.Focused == true)
                {

                  // 想要的值
                    this.textBox1.Text = vals[1];
                }
                else if (this.textBox2.Focused == true)
                {
                   // 想要的值

                    this.textBox2.Text = vals[2];
                }
                Clipboard.Clear();
            }

 

2 添加右键复制菜单

//  显示右键菜单

        private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                if (e.RowIndex >= 0)
                {
                  
                    if (dataGridView1.Rows[e.RowIndex].Selected == false)
                    {
                        dataGridView1.ClearSelection();
                        dataGridView1.Rows[e.RowIndex].Selected = true;
                    }
          
                    if (dataGridView1.SelectedRows.Count == 1)
                    {
                        if (e.RowIndex == -1 || e.ColumnIndex == -1)
                        {
                            return;
                        }
                        dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
                    }
                 
                    contextMenuStrip1.Show(MousePosition.X,MousePosition.Y);
                }
            }
        }

 

       // 选择Copy菜单时发生

        private void CopyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string str = this.dataGridView1.CurrentCell.Value.ToString();
            Clipboard.SetDataObject(str);
        }

 

-------------------------------------------------------------------------------

private void InjectionDrugForm_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.C)
            {
                // Ctrl+cキー押下時
                this.cellValue = this.InjectionDrugDataGridView.CurrentCell.Value.ToString();
                Clipboard.SetData(DataFormats.Text, this.cellValue);
            }
        }

 

        private void InjectionDrugForm_KeyDown(object sender, KeyEventArgs e)
        {
             if (e.Control && e.KeyCode == Keys.V)
            {
                // Ctrl+Vキー押下時
                this.InjectionDrugDataGridView.CurrentCell.Value = this.cellValue;
            }

      }

 

### 如何在 C# WinForms DataGridView 实现复制粘贴功能 为了实现在 `DataGridView` 控件中支持复制粘贴的功能,可以通过重写键盘事件处理器并利用剪贴板服务完成此目标。下面提供一段具体的实现方法以及相应的代码示例[^1]。 当用户按下 Ctrl+C 组合键时触发复制操作;而当按下了 Ctrl+V 后则执行粘贴逻辑: #### 复制选中的单元格到剪切板 ```csharp private void dataGridView_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.C) //检测是否为Ctrl+C组合键 { DataObject dataObj = dataGridView.GetClipboardContent(); if (dataObj != null) Clipboard.SetDataObject(dataObj); } } ``` #### 将剪切板的内容粘贴回表格内 ```csharp else if (e.Control && e.KeyCode == Keys.V)//检测是否为Ctrl+V组合键 { try { string[] pastedRows = Regex.Split(Clipboard.GetText(), "\r\n|\n"); int startRow = dataGridView.CurrentCell.RowIndex; int startCol = dataGridView.CurrentCell.ColumnIndex; foreach (string row in pastedRows) { string[] cellsInRow = row.Split('\t'); for (int i = 0; i < cellsInRow.Length; ++i) { if ((startRow >= 0 && startRow < dataGridView.Rows.Count) && (startCol + i >= 0 && startCol + i < dataGridView.Columns.Count)) { dataGridView[startCol + i, startRow].Value = cellsInRow[i]; } } ++startRow; } } catch { MessageBox.Show("无法解析剪贴板内容"); } } ``` 上述代码片段展示了如何监听用户的按键输入,并依据不同的快捷键来进行相应动作。对于复制命令而言,程序会获取当前被选中的区域并将之转换成可以存储于剪贴板的对象形式;而对于粘贴指令,则是从剪贴板读取文本信息再按照 Tab 键分隔符拆分成多个字段填充至指定位置上。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值