问题描述
先看下面第一张图,理解下需求这是个设计面板,大家可以理解成类似PhotoShop这样的设计面板,虚线框里面其实是一个文本输入框,可以在里面输入文字的,现在的问题是,当如鼠标点中这个文本输入框的时候,输入光标就进入了文本框等待我输入文字,然而我不希望这样的效果,我希望点中(单击)文本输入框,输入光标不要进入输入框而是等待我移动这个文本框到另一个位置但当我双击这个文本框的时候,输入光标就进入文本框等待我输入如下图网上有些人说转移焦点到一个无关的label上,但是在鼠标单击textBox事件里转移焦点之前,输入光标还是会在文本框里出现一下,感觉效果不太好大家有没有其他好的思路,最完美的方案我希望就是文本框本身就是双击获得输入焦点,单击表示点中了这个对象
解决方案
解决方案二:
我觉得你还是直接全靠gdi画上去比较妥当,包括文字
解决方案三:
你这个逻辑本身就是矛盾的如果你虚线框里面是文本区域那么鼠标点进去自然应该是光标状态而不是移动的十字箭头鼠标移动和输入光标只能二选一而且既然你都提到了photoshop那你为什么不直接参考一个ps的逻辑呢ps的文字工具也是一样整个虚线框都是文本域鼠标放入区域都是光标输入但是如果按住ALT的同时把鼠标放入就可以移动区域就像我刚才上面说的光标和移动你只能二选一但是你却可以变成(鼠标进入)和(按键+鼠标进入)两个状态来处理
解决方案四:
引用2楼crystal_lz的回复:
你这个逻辑本身就是矛盾的如果你虚线框里面是文本区域那么鼠标点进去自然应该是光标状态而不是移动的十字箭头鼠标移动和输入光标只能二选一而且既然你都提到了photoshop那你为什么不直接参考一个ps的逻辑呢ps的文字工具也是一样整个虚线框都是文本域鼠标放入区域都是光标输入但是如果按住ALT的同时把鼠标放入就可以移动区域就像我刚才上面说的光标和移动你只能二选一但是你却可以变成(鼠标进入)和(按键+鼠标进入)两个状态来处理
引用2楼crystal_lz的回复:
你这个逻辑本身就是矛盾的如果你虚线框里面是文本区域那么鼠标点进去自然应该是光标状态而不是移动的十字箭头鼠标移动和输入光标只能二选一而且既然你都提到了photoshop那你为什么不直接参考一个ps的逻辑呢ps的文字工具也是一样整个虚线框都是文本域鼠标放入区域都是光标输入但是如果按住ALT的同时把鼠标放入就可以移动区域就像我刚才上面说的光标和移动你只能二选一但是你却可以变成(鼠标进入)和(按键+鼠标进入)两个状态来处理
@crystal_lz谢谢你的回复。这样需求我是参考了一个现成的软件里是这样做的如下图第一帧和第二帧图像是代表鼠标点在这一块文本框上移动(由于我用了电脑截屏方式,所以鼠标样式没能截屏到图像里面),第三帧图像是双击进入了文本框开始编辑关于你提到的ps里的是这样操作的,拖一个文本框到面板上鼠标进入到文本框区域时是编辑状态,如果需要移动这个文本框,那么首选鼠标移出文本框区域同时按中Alt键可以实现移动,但是现在是这样的,我的设计面板里比如可能有两个或更多的文本框,我可能任何时候需要移动其中的文本框并实现编辑文本框,现在我是将这些所有的文本框当做对象放在List里面,当我要移动一个文本框时,首先要先拿到这个文本框对象,我的做法是,取出当前鼠标点击的坐标,然后到List里遍历所有的文本框,如果点击的坐标在文本框区域内则返回这个对象,所以问题来了,当我在文本框上点一下鼠标的时候,鼠标会进入文本框内,然而我的目的是第一:通过坐标点我能拿到这个对象第2:给软件使用者,表示我选中了这个文本框了可以移动他了但是鼠标却以光标闪动的形式在文本框里闪烁,给用户的意图不太明确
解决方案五:
好吧我说错了ps不是按住alt是ctrl不过我就不明白为什么你会存在多个文本框有什么意义?。。用一个文本框不就行了?拉出一个区域默认出来一个文本框填充满刚才的区域当鼠标离开焦点的时候文本框隐藏并且将文本框内的文字绘制到矩形框内然后进入区域显示移动如果是双击区域文本框再次显示出来并且获得焦点
解决方案六:
??这个本身就不应该直接继承textbox,如果你要机场textbox就需要自己拦截一下消息这个东西的正常做法是继承Control或usercontorl