找回密码
 立即注册

QQ登录

只需一步,快速开始

CanYou8

银牌会员

67

主题

191

帖子

2047

积分

银牌会员

积分
2047

活字格认证微信认证勋章元老葡萄

CanYou8
银牌会员   /  发表于:2016-2-16 10:18  /   查看:10751  /  回复:10
参考C1DataGrid的实现(http://gcdn.gcpowertools.com.cn/showtopic-19390.html),却无法取到组合键Ctrl+C。
请问如何在C1FlexGrid中实现选中效果还是以单行的形式,但是复制的时候是复制单击选中的单元格内容?
  1.         public RelayCommand<KeyEventArgs> GridKeyDownCopyCommand
  2.         {
  3.             get
  4.             {
  5.                 return new RelayCommand<KeyEventArgs>(e =>
  6.                 {
  7.                     var flexgrid = e.Source as C1FlexGrid;
  8.                     if (flexgrid != null &amp;&amp; e.KeyboardDevice.Modifiers == ModifierKeys.Control &amp;&amp; e.Key == Key.C)
  9.                     {
  10.                              //此处断点,但一直跳不进来
  11.                     }
  12.                 });
  13.             }
  14.         }
复制代码

10 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-2-16 11:18:00
沙发
回复 1楼CanYou8的帖子

我测试的是C1FlexGrid的PreviewKeyDown事件,是可以触发的。
  1. void fg_PreviewKeyDown(object sender, KeyEventArgs e)
  2.         {
  3.             if (e.Key == Key.C &amp;&amp; Keyboard.Modifiers == ModifierKeys.Control)
  4.             {
  5. //在这里添加断点,正常触发事件。
  6.                 e.Handled = true;
  7.             }
  8.         }
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2016-2-16 11:41:00
板凳
PreviewKeyDown事件可以,但不利于方法的统一维护;之前我们在C1DataGrid中是用以下方式捕捉事件的,请问这种方式在C1FlexGrid中为什么不行呢?
  1. <c1:C1FlexGrid Name="c1FlexGrid" Grid.Row="1" AutoGenerateColumns="False" AllowAddNew="False"
  2.                Style="{StaticResource Green}" BorderThickness="1"
  3.                SelectionMode="Row" MaxRowHeight="20"
  4.               ItemsSource="{Binding List,IsAsync=True}" SelectedItem="{Binding CurrentItem,Mode=TwoWay}"
  5.               LoadedRows="c1FlexGrid_LoadedRows">
  6.           <i:Interaction.Triggers>
  7.                 <i:EventTrigger EventName="MouseRightButtonDown">
  8.                       <command:EventToCommand PassEventArgsToCommand="True" Command="{Binding GridRightClickCommand}"/>
  9.                  </i:EventTrigger>
  10.                  <i:EventTrigger EventName="KeyDown">
  11.                       <command:EventToCommand PassEventArgsToCommand="True" Command="{Binding GridKeyDownCopyCommand}"/>
  12.                   </i:EventTrigger>
  13.           </i:Interaction.Triggers>
  14. </c1:C1FlexGrid>
复制代码
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-2-16 17:30:00
地板
回复 3楼CanYou8的帖子

WPF平台,某些组合键不能相应KeyDown事件。还有KeyDown事件被其他主界面截获,都是有可能的。
因此可以使用PreviewKeyDown事件来替代。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2016-2-17 11:51:00
5#
PreviewKeyDown事件下,如何取到当前所选的单元格?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-2-17 13:41:00
6#
回复 5楼CanYou8的帖子

HitTest方法可以根据鼠标位置,取到所选单元格的信息。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2016-2-17 14:11:00
7#
回复 6楼Alice的帖子

用HitTestInfo info = c1FlexGrid.HitTest(e) 取到的行、列序号都是-1,如何取单元格?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-2-17 14:55:00
8#
回复 7楼CanYou8的帖子

HitTest是根据鼠标位置转换为c1flexgrid位置信息,所以应该在鼠标相关事件里去获取,而不是键盘事件。

另外,C1FlexGrid的Selection/SelectedItem/SelectIndex属性都可以拿到选择的信息,可以根据需求选择。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2016-2-19 11:04:00
9#
已实现,谢谢!!! :strong:
  1.         //键盘录入时触发命令,此命令用于修改C1FlexGrid的ctrl+c复制事件
  2.         protected void c1FlexGrid_PreviewKeyDown(object sender, KeyEventArgs e)
  3.         {
  4.             if (e.Key != Key.C || Keyboard.Modifiers != ModifierKeys.Control) return;
  5.             var grid = sender as C1FlexGrid;
  6.             if (grid != null)
  7.             {
  8.                 var cr = grid.Selection;
  9.                 Clipboard.SetDataObject(grid[cr.Row, cr.Column], false);
  10.             }
  11.             e.Handled = true;
  12.         }
复制代码
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-2-19 11:47:00
10#
回复 9楼CanYou8的帖子

棒棒哒,赞一个。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部