Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有复制/粘贴功能的只读DataGridView?_C#_.net_Winforms_Datagridview - Fatal编程技术网

C# 具有复制/粘贴功能的只读DataGridView?

C# 具有复制/粘贴功能的只读DataGridView?,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我正在开发一个winform应用程序,并使用Datagridview显示记录 现在我有一个要求,单元格内容应该是只读的,但同时我希望最终用户可以将单元格内容复制到剪贴板,而不是编辑它 如果您有任何解决方案,请提出建议 DataGridView.ReadOnly = True; DataGridView.SelectionMode = DataGridViewSelectionMode.CellSelect; 然后用户可以从单元格中选择数据(字符串),并按CTRL+V组合键将其放入剪贴板

我正在开发一个winform应用程序,并使用Datagridview显示记录

现在我有一个要求,单元格内容应该是只读的,但同时我希望最终用户可以将单元格内容复制到剪贴板,而不是编辑它

如果您有任何解决方案,请提出建议

DataGridView.ReadOnly = True;   
DataGridView.SelectionMode = DataGridViewSelectionMode.CellSelect;
然后用户可以从单元格中选择数据(字符串),并按CTRL+V组合键将其放入剪贴板


然后用户可以从单元格中选择数据(字符串)并按CTRL+V将其放入剪贴板

您可以使用此代码进行尝试-基于
DataGridViewCell.OnKeyPress

链接:


您可以尝试使用此代码-基于
DataGridViewCell.OnKeyPress

链接:


您还可以向DataGrid添加一个ContextMenu,并添加一个复制和粘贴项,向其中添加Ctrl+V和Ctrl+C快捷键

然后你处理他们的事件。如果需要,可以将菜单设置为Visible=false,右键单击时菜单不会显示,但快捷方式仍然有效


就我个人而言,我喜欢右键单击菜单添加到数据网格的触摸功能,但这是您的选择。

您还可以向数据网格添加上下文菜单,添加复制和粘贴项,向其中添加Ctrl+V和Ctrl+C快捷键

然后你处理他们的事件。如果需要,可以将菜单设置为Visible=false,右键单击时菜单不会显示,但快捷方式仍然有效

就我个人而言,我喜欢右键单击菜单添加到数据网格中的触摸功能,但这是您的选择。

您可以添加到XAML中: ClipboardCopyMode=“IncludeHeader”/“ExcludeHeader”/“NONE”

您可以添加到XAML中:
ClipboardCopyMode=“IncludeHeader”/“ExcludeHeader”/“NONE”

回答得好!我最喜欢这个解决方案。看起来默认的
SelectionMode
值(
RowHeaderSelect
)可以正常工作,因此如果愿意,可以跳过第二行。将其设置为类似于
FullRowSelect
的选项将无法正常工作;)回答得好!我最喜欢这个解决方案。看起来默认的
SelectionMode
值(
RowHeaderSelect
)可以正常工作,因此如果愿意,可以跳过第二行。将其设置为类似于
FullRowSelect
的选项将无法正常工作;)
private void DataGridViewCell_KeyPress(KeyPressEventArgs e, int index)
{
     if ( (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl) 
          && e.Key == Key.C)
     {
        //You can get your cell based on index
        Clipboard.SetText(.....);
     }
}