事件传递问题(高分悬赏)
我有一个WinForm窗口,窗口上面要铺一张图片,这张图片的大部分是透明的,我希望用户可以点击或者拖动WinForm窗口上的控件进行操作。谁能够给出代码 钩子 透明 绘制 --------------------编程问答-------------------- 都有相应的事件,你想干嘛就干嘛啊,不知道你想怎样 --------------------编程问答-------------------- 一个类似红警地图编辑器源代码(C#)
这上面有拖拽、透明、动态添加、删除控件等源码 --------------------编程问答-------------------- 都有相应的事件, 想干嘛就干嘛啊, --------------------编程问答-------------------- 控件都可以操作。还需要什么代码? --------------------编程问答-------------------- 可能是我没说清楚,图片盖住了整个界面,不是背景,是浮在窗口上面的,我希望图片框能够不接受任何事件,所有的用户操作都能够漏到下面窗口上去 --------------------编程问答-------------------- 你这不可能吧。除非你根据区域去找相应位置的控件。然后再做操作。 --------------------编程问答--------------------
窗口上的操作有点击,还有拖动,如果是只有点击的话,截获一下然后找对应的控件执行事件就行了,但是有拖动,复杂度就比较高了,所以这个方法不太靠谱 --------------------编程问答-------------------- 为什么不靠谱?你你拖动的时候就可以同时移动控件啊。你只是关联图片上的位置到后面窗体的位置。如果有控件你按着鼠标拖动。那时候触发拖动事件不就可以了?
为什么会觉得不靠谱。 --------------------编程问答-------------------- 那为什么不把图片设置成背景呢 --------------------编程问答-------------------- 傻瓜做设计,聪明人怎么都没法实现。
但是反过来
聪明人做设计,傻瓜也是可以实现的。
这就是为什么做程序设计的人需要比普通开发人员的素质更高。 --------------------编程问答-------------------- 看我的博客,有通用的实现,大型企业级控件库的应用。
=======================================================
.NET快速开发整合框架(RDIFramework.NET),基于.NET的快速开发、整合框架,给用户和开发者最佳的.Net框架部署方案。
平台博客:[CNBLOGS]http://www.cnblogs.com/huyong
[CSDN]http://blog.csdn.net/chinahuyong
交流QQ:406590790 (请注明:CSDN)
平台微博:http://t.qq.com/yonghu86
邮件交流:406590790@qq.com
--------------------编程问答-------------------- 不懂....... --------------------编程问答--------------------
从实现的角度来讲,这样做事可以实现的,但是从现实资源的角度来讲,这样的复杂度是非常高的,需要考虑,鼠标移入控件是控件的变化,鼠标拖动是控件的变化,鼠标点击是控件的变化,还要考虑控件时间出发后弹出的新控件的情况,复杂度是非常高的,投入的人力太大,实现的成本太高,所以我说这种方式不靠谱,对我来说 --------------------编程问答--------------------
图片设成背景,控件就会在背景之上,会盖住图片内容,图片的内容是用户的批注,不能被盖住,不然就失去意义了 --------------------编程问答--------------------
来跟着我说:“我不知道该怎么做” --------------------编程问答-------------------- 你的控件以及前端背景可以使用绘图方式来做,所谓的按钮事件执行只要是在某个位置,对应的事件响应即可 --------------------编程问答--------------------
谢谢,这种方式我昨天做了实验,但是最终放弃了,原因是,1、绘制时需要有一个载体,就是图片绘制到那一层上,一般是控件(可能是我的实现方式有问题),绘制上去之后同样载体会遮挡下层的控件,造成事件不能接收。2、你说的对控件做定位的问题,这需要对这个窗口的控件进行热点描述,我的程序是一个电子书,书页上的控件是不固定的,根据内容会有变化,因此在用户用鼠标操作时,程序根据热点进行相应的事件处理是非常复杂的一个操作,因为不光是点击操作,还有拖动,以及鼠标移动时控件的UI变化,另外有些点击操作会在界面上生成新的控件。综上所述你的这个方案没有完全解决我的问题,谢谢 --------------------编程问答--------------------
你只要挡住了。那么你怎么可能会触发事件呢?所以你只要在那个位置的动作就触发在那个位置的事件。没你想的那么麻烦。
事件处理就是你原来的控件的事件处理。只是增加了。对控件事件的invoke而已。 --------------------编程问答-------------------- 都在一个界面绘制,控件用绘制代替
--------------------编程问答-------------------- 可以考虑试着把控件设置成透明或者半透明的。另外是不是也可以考虑把图片做成类似网游中地图的形式呢,需要时显示不需要时收起。 --------------------编程问答-------------------- 根据坐标找控件,再提交事件
private int offsetX = 0;
private int offsetY = 0;
private double xRatio = 1;
private double yRatio = 1;
private void pbLayout_MouseMove(object sender, MouseEventArgs e)
{
if (pbLayout.Image == null) return;
if (e.X >= ((Bitmap)pbLayout.Image).Width) return;
if (e.Y >= ((Bitmap)pbLayout.Image).Height) return;
if (xRatio == 0 || yRatio == 0) return;
//画面可能和地图大小及位置不一致,如星际争霸的小地图与战斗场景
double X, Y;
X = e.X - offsetX;
Y = e.Y - offsetY;
X = X / xRatio;
Y = Y / yRatio;
//根据坐标找到你的控件。
//...
}
补充:.NET技术 , C#