找回密码
 立即注册

QQ登录

只需一步,快速开始

hcy525

初级会员

12

主题

29

帖子

218

积分

初级会员

积分
218
hcy525
初级会员   /  发表于:2016-8-11 17:27  /   查看:6902  /  回复:7
WPF平台中的GcSpreadSheet控件,本身是支持CTRL+C,CTRL+V的,但是我们的业务需要用户按下CTRL+C,CTRL+V的时候做一些业务处理,怎么可以屏蔽掉控件本身的CTRL+C,CTRL+V功能,重写自己的事件处理程序?

7 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-8-11 17:47:25
沙发
您参考下下面代码,自定义keymap
  1. public MainWindow()
  2.         {
  3.             InitializeComponent();
  4.             Dictionary<GrapeCity.Windows.SpreadSheet.UI.KeyStroke, GrapeCity.Windows.SpreadSheet.UI.SpreadAction> keyMap = gcSpreadSheet1.View.KeyMap;
  5.             keyMap.Add(new GrapeCity.Windows.SpreadSheet.UI.KeyStroke(Key.OemPlus, ModifierKeys.Alt), new GrapeCity.Windows.SpreadSheet.UI.SpreadAction(OnInsertSumFormula));
  6.             keyMap.Add(new GrapeCity.Windows.SpreadSheet.UI.KeyStroke(Key.B, ModifierKeys.Alt), new GrapeCity.Windows.SpreadSheet.UI.SpreadAction(GrapeCity.Windows.SpreadSheet.UI.SpreadActions.NavigationLeft));
  7.             keyMap.Add(new GrapeCity.Windows.SpreadSheet.UI.KeyStroke(Key.A, ModifierKeys.Alt), new GrapeCity.Windows.SpreadSheet.UI.SpreadAction(GrapeCity.Windows.SpreadSheet.UI.SpreadActions.Clear));
  8.            
  9.         }
  10.         private void OnInsertSumFormula(GrapeCity.Windows.SpreadSheet.UI.SheetView sheet)
  11.         {
  12.             int r = sheet.Worksheet.ActiveRowIndex;
  13.             int c = sheet.Worksheet.ActiveColumnIndex;
  14.             if (r > 0)
  15.             {
  16.                 int rStart = r - 1;
  17.                 System.ComponentModel.TypeConverter doubleConverter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(double));
  18.                 while (rStart > 0)
  19.                 {
  20.                     object val = sheet.Worksheet.Cells[rStart, c].Value;
  21.                     if (val is double || val is float || val is long || val is int || val is short || val is byte ||
  22.                       (val != null && doubleConverter.CanConvertFrom(val.GetType())))
  23.                         rStart--;
  24.                 }
  25.                 //Type numbers in a few cells in a column and type Alt + equal in the cell below them.
  26.                //Hit enter to see the formula update.
  27.                 string formula = "SUM(" + sheet.Worksheet.Cells[rStart, c, r - 1, c].ToString() + ")";
  28.                 sheet.Worksheet.Cells[r, c].Formula = formula;
  29.                 sheet.StartCellEditing();
  30.             }
  31.         }
复制代码
回复 使用道具 举报
hcy525
初级会员   /  发表于:2016-8-12 15:08:12
板凳
private void gcSpreadSheet1_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {

                this.gcSpreadSheet1.ClipboardPasted += gcSpreadSheet1_ClipboardPasted;
                LoadSpreadMain();
                this.gcSpreadSheet1.TabStripVisibility = Visibility.Hidden;
                //if (m_ReportCtrl == null) return;

                //m_ReportCtrl.ActiveCellChanged();
                Dictionary<GrapeCity.Windows.SpreadSheet.UI.KeyStroke, GrapeCity.Windows.SpreadSheet.UI.SpreadAction>  keyMap = gcSpreadSheet1.View.KeyMap;
                keyMap.Add(new GrapeCity.Windows.SpreadSheet.UI.KeyStroke(Key.C, ModifierKeys.Control), new GrapeCity.Windows.SpreadSheet.UI.SpreadAction(OnCopy));
                keyMap.Add(new GrapeCity.Windows.SpreadSheet.UI.KeyStroke(Key.V, ModifierKeys.Control), new GrapeCity.Windows.SpreadSheet.UI.SpreadAction(OnPaste));
            }
            catch (Exception ex)
            {
                MessBox.MsgBoxErr(ex);

            }
        }
        //操作面板复制
        private void OnCopy(object sender,ActionEventArgs e)
        {
            m_ReportCtrl.CopyCellProperty();
        }
        private void OnPaste(object sender, ActionEventArgs e)
        {
            m_ReportCtrl.PasteCellProperty();
        }
像这样写的代码,当按下CTRL+C,CTRL+V的时候,没有触发相应的事件,该怎么处理?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-8-12 15:37:27
地板
因为keyMap中已经有ctrl+c了,所以您要先remove掉
            keyMap.Remove(new KeyStroke(Key.C, ModifierKeys.Control));
            keyMap.Add(new KeyStroke(Key.C, ModifierKeys.Control), new SpreadAction(OnCopy));
回复 使用道具 举报
hcy525
初级会员   /  发表于:2016-8-17 11:22:47
5#
因为keyMap中已经有ctrl+c了,所以您要先remove掉
            keyMap.Remove(new KeyStroke(Key.C, ModifierKeys.Control));
             keyMap.Add(new KeyStroke(Key.C, ModifierKeys.Control), new SpreadAction(OnCopy));与这种方式相反,怎么可以还原成控件原有的CTRL+C,CTRL+V功能,屏蔽掉自定义的CTRL+C,CTRL+V功能?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-8-17 11:37:46
6#
您好,同样是remove掉老的,
然后

            keyMap.Add(new GrapeCity.Windows.SpreadSheet.UI.KeyStroke(Key.C, ModifierKeys.Control), new GrapeCity.Windows.SpreadSheet.UI.SpreadAction(GrapeCity.Windows.SpreadSheet.UI.SpreadActions.Copy));
            keyMap.Add(new GrapeCity.Windows.SpreadSheet.UI.KeyStroke(Key.V, ModifierKeys.Control), new GrapeCity.Windows.SpreadSheet.UI.SpreadAction(GrapeCity.Windows.SpreadSheet.UI.SpreadActions.Paste));
回复 使用道具 举报
hcy525
初级会员   /  发表于:2016-9-7 11:48:33
7#
请问下,我用下面的方式屏蔽了控件本身的F2快捷键,加上了自定义的F2快捷键功能,我怎么可以屏蔽掉自定义的功能,还原到控件原有的F2快捷键?  
keyMap.Remove(new KeyStroke(Key.F2, ModifierKeys.None));
keyMap.Add(new KeyStroke(Key.F2, ModifierKeys.None), new SpreadAction(OnEditProperty));
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-9-7 17:32:21
8#
hcy525 发表于 2016-9-7 11:48
请问下,我用下面的方式屏蔽了控件本身的F2快捷键,加上了自定义的F2快捷键功能,我怎么可以屏蔽掉自定义的 ...

您好。
这个问题已经在您新开的帖子里回复,如果有任何需要沟通的问题,您可以在那个帖子里跟帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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