vs2008! C#GDI+绘制数字文本框!
第一步,点击GDI+绘制的矩形框区域,弹出一个输入数字窗口;第二步,数字输入;第三步,点击确认按钮,输入数字显示在矩形框中。问题1:如何绘制数字输入窗口;问题2:输入数字...
第一步,点击GDI+绘制的矩形框区域,弹出一个输入数字窗口;
第二步,数字输入;
第三步,点击确认按钮,输入数字显示在矩形框中。
问题1:如何绘制数字输入窗口;
问题2:输入数字如何显示在规定矩形内;
mousedown不是问题! 展开
第二步,数字输入;
第三步,点击确认按钮,输入数字显示在矩形框中。
问题1:如何绘制数字输入窗口;
问题2:输入数字如何显示在规定矩形内;
mousedown不是问题! 展开
展开全部
> 数字输入你要弹出么?如何弹出?弹出一个新的窗体还是直接在原来控件上出现输入装置?
> 数字输入理论上如果你能响应keydown就问题不大...不响应请设置自定义控件允许焦点...还不响应就看天...
> 如果输入窗口由你自己绘制的话会恶心死你 你要做的是完全模拟一个textBox的行为 如果你做过基于directX的游戏就会发现这多恶心...需要计算光标在哪 需要处理内容超出文本框的情况 需要处理一大堆IMM事件来支持输入法(只输入数字反而简单了...) 需要支持鼠标事件来选中文本和移动光标 需要支持shift+方向键的选中 ctrl+C ctrl+V的剪切板处理...总之....想做的没什么瑕疵要费一番功夫...
> 其实简单的话(比如没光标...)直接响应keydown 程序里留一个stringBuilder就好了...每keydown识别一次 然后整个控件重绘 逐个字符用GDI绘制出来...
> GDI绘制文本有啥难度么=A= 当然 这还分有换行没换行的情况... 还要计算到绘制内容超出客户区的情况 所以要逐字符measure...或者设置clip然后简单的右对齐绘制 应该没什么问题 不会超出矩形外的
> 总之能处理以上想到的大大小小细节就好了 绘制和事件响应我觉得没难点=A=
> 数字输入理论上如果你能响应keydown就问题不大...不响应请设置自定义控件允许焦点...还不响应就看天...
> 如果输入窗口由你自己绘制的话会恶心死你 你要做的是完全模拟一个textBox的行为 如果你做过基于directX的游戏就会发现这多恶心...需要计算光标在哪 需要处理内容超出文本框的情况 需要处理一大堆IMM事件来支持输入法(只输入数字反而简单了...) 需要支持鼠标事件来选中文本和移动光标 需要支持shift+方向键的选中 ctrl+C ctrl+V的剪切板处理...总之....想做的没什么瑕疵要费一番功夫...
> 其实简单的话(比如没光标...)直接响应keydown 程序里留一个stringBuilder就好了...每keydown识别一次 然后整个控件重绘 逐个字符用GDI绘制出来...
> GDI绘制文本有啥难度么=A= 当然 这还分有换行没换行的情况... 还要计算到绘制内容超出客户区的情况 所以要逐字符measure...或者设置clip然后简单的右对齐绘制 应该没什么问题 不会超出矩形外的
> 总之能处理以上想到的大大小小细节就好了 绘制和事件响应我觉得没难点=A=
追问
1数字输入需要一个类似计算器界面来输入,这个界面需要自己绘制;2响应问题貌似还不会。3说到重点了!就是这些问题困扰我了!4:可以没光标,就是不知道输入的数字如何转移到矩形中重点啊!!5:这个逐字符measure可以学学去,右对齐也可以做到!!附:请重点回答以下问题:1:数字输入界面按键输入如何显示!就像计算器按键后显示出数字2:界面输入的数字如何转移到指定的矩形中3:如果还有更好更简单的数字输入法也可以的!!
追答
我觉得你是要制造类似验证码输入的UI么- - 简单一点可以如下考虑:
> 控件类要绘制的东西只有数字 直接维护一个StringBuilder类型的字段就OK
> 按键输入就重写keypress事件 判断是否按下数字键 回车键 退格键
如果是数字键 stringBuilder.Append这个字符 退格而且不空就Remove最后 回车相当于确定
> 当StringBuilder改变后 主动调用一次Invalidate() 促使控件重绘自己
> 绘图的代码独立写在OnPrint事件里 和上面不关联 只使用类中储存的一些状态参数
比如绘图部分只要忠实的在指定的位置把StringBuilder里的东西遍历绘制就好
这样整个逻辑就是 按键-触发keypress-主动调用invalidate-操作系统调用OnPrint-绘制出来了..
如果你的UI里还有附加的数字按钮(类似计算器) 可以用面向对象思想 把每个按钮虚拟成一个对象 附加上绘图位置和表示数字的信息 依然由OnPrint忠实绘制 当mouseDown事件触发的时候走和上面一样的事件链即可 问题不大..
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询