找回密码
 立即注册

QQ登录

只需一步,快速开始

mimima2020

中级会员

1

主题

15

帖子

688

积分

中级会员

积分
688

活字格认证

最新发帖
mimima2020
中级会员   /  发表于:2014-12-5 14:12  /   查看:23903  /  回复:33
在专业版中有个用户设计器的功能,我想利用这个功能给产品做一个可以让用户自己修改报表模板的功能,只希望用户调整模板上控件的位置,不希望他们删除模板上的控件。
但是没找到怎样截获删除键(Del)的事件,想请教一下这个删除事件怎样截获

33 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2014-12-5 16:23:00
沙发
回复 1楼mimima2020的帖子

mimima2020 你好

不知道你使用的是ActiveReports哪个版本,在ActiveReports 9中提供了Designer.LayoutChanging 事件,你可以在这个事件中判断用户的操作类型:
  1. private void ardMain_LayoutChanging(object sender, GrapeCity.ActiveReports.Design.LayoutChangingArgs e)
  2. {
  3.     if (e.Type == Design.LayoutChangeType.SectionDelete)  
  4.     {  
  5.         DialogResult Result;  
  6.         Result = MessageBox.Show("Are you sure you want to delete this section?", "Delete?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);  
  7.         if (Result == DialogResult.Cancel)  
  8.         {  
  9.             e.AllowChange = false;  
  10.         }  
  11.         else  
  12.         {  
  13.             e.AllowChange = true;  
  14.         }  
  15.     }  
  16. }
复制代码

评分

参与人数 1满意度 +5 收起 理由
mimima2020 + 5 很实用

查看全部评分

回复 使用道具 举报
mimima2020
中级会员   /  发表于:2014-12-5 17:08:00
板凳
你好,我用的是ActiveReports 7,刚刚试了一下,直接加下面代码的话,
reportdesigner.LayoutChanging += (sender, args) { ..... }
在ardMain_LayoutChanging调用之后才被执行到,这时候删除确认的对话框已经弹出来了,
怎么样在执行ardMain_LayoutChanging之前就把Delete事件截取到,不让删除确认对话框弹出来啊

我试过reportdesigner.KeyDown,没有用,这个KeyDown事件没有传递到reportdesigner这一层

另外,还有个问题,右键菜单里面也可以删除,怎么样把右键菜单禁掉,不让右键菜单弹出来啊
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-8 18:04:00
地板
回复 3楼mimima2020的帖子

如果是 7.0 请触发reportDesigner_LayoutChanging事件之前,设置以下代码:

  1.             reportDesigner.PromptUser = false;
复制代码

评分

参与人数 1满意度 +5 收起 理由
mimima2020 + 5 可以解决问题

查看全部评分

回复 使用道具 举报
mimima2020
中级会员   /  发表于:2014-12-9 14:38:00
5#
非常感谢!!!
另外,还有个问题,右键菜单里面也可以删除,怎么样把右键菜单禁掉,不让右键菜单弹出来啊。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-9 16:57:00
6#
回复 5楼mimima2020的帖子

测试代码:
  1.          reportDesigner.ContextMenuOpen+=reportDesigner_ContextMenuOpen;
  2.         void reportDesigner_ContextMenuOpen(object sender, ContextMenuOpenArgs e)
  3.         {
  4.             e.Cancel = true;
  5.         }
复制代码

评分

参与人数 1满意度 +5 收起 理由
mimima2020 + 5 搞定

查看全部评分

回复 使用道具 举报
mimima2020
中级会员   /  发表于:2014-12-9 17:50:00
7#
非常感谢!
你们的支持太强大了!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-9 18:32:00
8#
回复 7楼mimima2020的帖子

客气了。
为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢

评分

参与人数 1满意度 +5 收起 理由
mimima2020 + 5 回复的很专业,回复的内容都能解决问题

查看全部评分

回复 使用道具 举报
mimima2020
中级会员   /  发表于:2014-12-15 10:27:00
9#
不好意思,再追加一个问题
在读入现有的模板文件后(可以是区域报表,也可以是页面报表)
怎么控制能做到只可以让用户修改Label的部分,不能修改TextBox的部分啊
(因为TextBox的修改和数据有关系,怕用户改坏了,所以需要设置一下不让他修改)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-15 15:01:00
10#
回复 9楼mimima2020的帖子

如果能够判断出当前控件的类型进而决定是否可修改动作,是否可以满足您需求?
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部