NickYau 发表于 2020-8-3 11:02:53

撤销问题

如何让按钮点击事件继承表格控件的快捷键Ctrl+z的事件?

NickYau 发表于 2020-8-3 11:25:13

以及重做功能

Richard.Ma 发表于 2020-8-3 13:46:32

你好,这个没有办法直接做到,

不过C1提供了自定义输入快捷键的设置方式,比如可以设置下面的代码,然后模拟按键

var inputmap=fpSpread1.GetInputMap(InputMapMode.WhenAncestorOfFocused);
inputmap.Put(new Keystroke(Keys.NumPad1, Keys.Control), FarPoint.Win.Spread.SpreadActions.Undo);

       private void button1_Click(object sender, EventArgs e)
      {
            fpSpread1.Focus();
            SendKeys.Send("{A}");
      }

NickYau 发表于 2020-8-3 14:08:53

Richard.Ma 发表于 2020-8-3 13:46
你好,这个没有办法直接做到,

不过C1提供了自定义输入快捷键的设置方式,比如可以设置下面的代码,然后 ...

那有什么方法能存储操作,然后能进行回退和重做?

NickYau 发表于 2020-8-3 14:10:27

Richard.Ma 发表于 2020-8-3 13:46
你好,这个没有办法直接做到,

不过C1提供了自定义输入快捷键的设置方式,比如可以设置下面的代码,然后 ...

https://gcdn.grapecity.com.cn/showtopic-68012-1-2.html
这张帖子的回退只能回退到前一步,再之前的都不能回退了

Richard.Ma 发表于 2020-8-3 17:34:21

不需要存储操作,Spread本身就已经有撤销和重做的功能了,我这边测试的结果,在几个单元格中填入数据后,是可以一个一个撤销的,或者重做的

NickYau 发表于 2020-8-3 17:43:16

Richard.Ma 发表于 2020-8-3 17:34
不需要存储操作,Spread本身就已经有撤销和重做的功能了,我这边测试的结果,在几个单元格中填入数据后,是 ...

那哪两个方法能触发撤销和重做?

Richard.Ma 发表于 2020-8-3 18:02:03

没有提供方法,因此只能是通过上述 模拟按键的方法

SpreadActions.Undo和Redo就是触发撤销和重写动作


            var inputmap = fpSpread1.GetInputMap(InputMapMode.WhenAncestorOfFocused);
            inputmap.Put(new Keystroke(Keys.NumPad1, Keys.Control), FarPoint.Win.Spread.SpreadActions.Undo);
            inputmap.Put(new Keystroke(Keys.NumPad2, Keys.Control), FarPoint.Win.Spread.SpreadActions.Redo);

NickYau 发表于 2020-8-4 09:11:33

Richard.Ma 发表于 2020-8-3 18:02
没有提供方法,因此只能是通过上述 模拟按键的方法

SpreadActions.Undo和Redo就是触发撤销和重写动作


但是该方法只适用C1,spread.net在xaml中并无该方法

Richard.Ma 发表于 2020-8-4 14:19:59

抱歉,我没有看清楚你用的是WPF平台,
在WPF中也是通过模拟CTRL+Z和CTRL+Y就行

但是在wpf无法使用sendkeys,我帮你在网上找到的一个教程,
https://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html
里面的http://files.cnblogs.com/zhouyinhui/Simulation.zip
封装好了模拟按键的类,如下调用即可模拟CTRL+Z撤销和CTRL+Y重做

      private void Button_Click(object sender, RoutedEventArgs e)
      {
            
            spread1.Focus();
            Keyboard.Press(Key.LeftCtrl);
            Keyboard.Press(Key.Z);
            Keyboard.Release(Key.Z);
            Keyboard.Release(Key.LeftCtrl);

      }

      private void Button_Click_1(object sender, RoutedEventArgs e)
      {
            spread1.Focus();
            Keyboard.Press(Key.LeftCtrl);
            Keyboard.Press(Key.Y);
            Keyboard.Release(Key.Y);
            Keyboard.Release(Key.LeftCtrl);
      }


页: [1] 2
查看完整版本: 撤销问题