找回密码
 立即注册

QQ登录

只需一步,快速开始

lzh3452

论坛元老

32

主题

188

帖子

1万

积分

论坛元老

积分
18686

活字格认证

lzh3452
论坛元老   /  发表于:2012-3-2 13:55  /   查看:10752  /  回复:19
我有个Spread,正在编辑一个Cell时,在内容合法前是不可以离开编辑状态的,也就是如果输入的不合法,就一直在Cell里,除了关闭窗口,其他都不能点。
但是我现在如果把焦点切换到其他窗口,比如Excel,然后再切回来,Spread就会退出编辑状态。有没有什么办法避免这种情况?

19 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-3-2 18:03:00
沙发

回复 1# lzh3452 的帖子

lzh3452 你好,
由于不清楚 Spread 做了哪些设置,根据当前信息我没有办法重现该问题,请发 Demo 到论坛调试。
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-3-3 13:42:00
板凳

回复 2# iceman 的帖子

你好,我没有做什么特殊的设置,就是在KeyDown里做了下验证,比如内容是否是全数字,不是就取消,我做的是回车跳到下一个Cell里,所以回车的时候就判断这个。CellClick里判断,如果EditMode=true,就取消。
我觉得这些并不影响你再现这个问题啊,就是在Cell里正编辑的时候,把焦点切到别的窗口,在回来,Cell退出了编辑状态,至于我怎么验证是否可以退出那不重要,我现在就是希望回来的时候还在Cell里,无条件的!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-5 11:15:00
地板

回复 3# lzh3452 的帖子

lzh3452  你好,
可以重载 Form 的 OnActivated 方法,在该方法中设置 EditMode 属性,该属性控制活跃单元格是否处于编辑状态。测试代码:
  1.         
  2. protected override void OnActivated(EventArgs e)
  3.         {
  4.             this.fpSpread1.EditMode = true;
  5.             base.OnActivated(e);
  6.         }
复制代码
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-3-5 13:25:00
5#

回复 4# iceman 的帖子

这样不行啊,如果原来不是编辑状态,那不是切一下窗口就进入编辑状态了么!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-5 15:51:00
6#

回复 5# lzh3452 的帖子

lzh3452  你好,请尝试下面代码:

  1.         protected override void OnActivated(EventArgs e)
  2.         {
  3.             this.fpSpread1.EditMode = IsEdit;
  4.             base.OnActivated(e);
  5.             System.Diagnostics.Debug.WriteLine(String.Format("======================OnActivated:{0}", this.fpSpread1.EditMode.ToString()));
  6.         }

  7.         protected override void OnDeactivate(EventArgs e)
  8.         {
  9.             IsEdit = this.fpSpread1.EditMode;
  10.             base.OnDeactivate(e);

  11.             System.Diagnostics.Debug.WriteLine(String.Format("======================OnDeactivate:{0}",this.fpSpread1.EditMode.ToString()));
  12.         }
复制代码
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-3-6 10:50:00
7#

回复 6# iceman 的帖子

恩,这个好使了,另外,鼠标滚轮按下,滚轮滚动,右键按下都应该怎么屏蔽?我希望这些都没有反应,就像什么都没按一样。滚轮滚动应该是可以,但是不要退出编辑状态。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-7 10:18:00
8#

回复 7# lzh3452 的帖子

1.mouse wheel 解决方案:
  1. void fpSpread1_TopChange(object sender, FarPoint.Win.Spread.TopChangeEventArgs e)
  2.         {
  3.             if (flag)
  4.             {
  5.                 flag = false;
  6.                 this.fpSpread1.SetViewportTopRow(0, e.OldTop);
  7.                 this.fpSpread1.EditMode = true;
  8.             }
  9.         }
  10.         void fpSpread1_MouseWheel(object sender, MouseEventArgs e)
  11.         {
  12.             flag = true;   
  13.         }
复制代码


2.Edit 状态下点击右键弹出的 Menu 为标准控件 TextBox 的 ContextMenu,楼主可以从这方面入手。
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-3-7 13:55:00
9#

回复 8# iceman 的帖子

1我在研究研究,2那个现在是不弹Menu的,就是什么都没有发生,仅仅是退出了Edit状态,没有触发LeaveCell事件。让我都不知道要在哪里取消这件事了!
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-3-12 18:12:00
10#

回复 8# iceman 的帖子

你的那个事件是不是3.0里没有啊?我怎么找不到那个事件呢!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部