社区
C#
帖子详情
Winform 中,我想按Ctr+W 显示一个提示框!
internetibm
2003-12-16 04:53:09
第1:Winform 中,我想按Ctr+W 显示一个提示框!
第2:我想在Text框中只能输入数字!
这段代码怎样写?
...全文
94
25
打赏
收藏
Winform 中,我想按Ctr+W 显示一个提示框!
第1:Winform 中,我想按Ctr+W 显示一个提示框! 第2:我想在Text框中只能输入数字! 这段代码怎样写?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
IceboundRock
2003-12-17
打赏
举报
回复
那个属性啊?
isaiahupas
2003-12-17
打赏
举报
回复
Q2:用NumbericUpDown控件啊!这个控件有一种style是和文本框长得一样的。
IceboundRock
2003-12-17
打赏
举报
回复
我也发现了这个问题,所以我改用override PreProcessMessage了
TeaBall
2003-12-17
打赏
举报
回复
mark
softbunny
2003-12-17
打赏
举报
回复
haiwangstar() 的办法好~ 我第一时间想到的也是窗体的KeyDown事件,怎么就没从菜单方面想想呢?多省事呀~~
KentYu
2003-12-17
打赏
举报
回复
TO :IceboundRock()
你实现IMessageFilter接口来完成第二个问题的方法不大行的通。它把整个application所有的非数字按键的消息都筛了,这样的话,其他的控件也不响应非数字按键了
KentYu
2003-12-17
打赏
举报
回复
mark
haiwangstar
2003-12-17
打赏
举报
回复
声明:昨晚1时,偶在自己的机器上调试,发现重载ProcessKeyPreview达不到要实现的效果,它并没有筛选消息,为什么呢?偶也没有多想。偶从前做过NOTEPAD的转到对话框,(源码不在手头上)其中的数字框正好同楼主的要求相同,要重载PreProcessMessage才行,随即给楼主发了消息。特此声明,以免误导大家。
simanh
2003-12-16
打赏
举报
回复
up
IceboundRock
2003-12-16
打赏
举报
回复
重要弄好了,重载PreProcessMessage
public class NumBox : System.Windows.Forms.TextBox
{
const int WM_KEYDOWN = 0x0100;
public NumBox()
{
}
public override bool PreProcessMessage(ref Message m)
{
if(m.Msg == WM_KEYDOWN)
{
int nInput = m.WParam.ToInt32();
if(!((nInput > 47 && nInput < 58) || (nInput > 36 && nInput < 41)))
{
return true;
}
}
return base.PreProcessMessage (ref m);
}
}
包括上下左右也可以处理了
IceboundRock
2003-12-16
打赏
举报
回复
楼上的方法不错:)我又找到一种,实现IMessageFilter接口来完成第二个问题的方法
public class NumBox : System.Windows.Forms.TextBox , IMessageFilter
{
const int WM_KEYDOWN = 0x0100;
public NumBox()
{
Application.AddMessageFilter(this);
}
~NumBox()
{
Application.RemoveMessageFilter(this);
}
public bool PreFilterMessage(ref Message m)
{
// TODO: 还要判断是不是移动光标的键
if(m.Msg == WM_KEYDOWN)
{
int nInput = m.WParam.ToInt32();
if(nInput < 48 || nInput > 57)
{
m.Msg = -1;
return true;
}
}
return false;
}
}
levinknight
2003-12-16
打赏
举报
回复
第一个问题:可以添一个菜单项,将来其快捷方式设为Ctrl + W ,然后设该菜单项Visable = false,这是比较简洁,方便的方法。
第二个问题:不用那么麻烦,重载ProcessKeyPreview函数即可,判断按下的是不是数字键,如果不是则返回true,表明你已处理了这个消息,剩下的交给C# 。很简洁的方法。
haiwangstar
2003-12-16
打赏
举报
回复
if(nInput < 48 || nInput > 57)
{
Text = strText;
}
else
{
strText = Text;
}
这段代码有错误,你没有把按键字符传递给文本框啊。
第一个问题:可以添一个菜单项,将来其快捷方式设为Ctrl + W ,然后设该菜单项Visable = false,这是比较简洁,方便的方法。
第二个问题:不用那么麻烦,重载ProcessKeyPreview函数即可,判断按下的是不是数字键,如果不是则返回true,表明你已处理了这个消息,剩下的交给C# 。很简洁的方法。
skywang0810
2003-12-16
打赏
举报
回复
up
haiwangstar
2003-12-16
打赏
举报
回复
if(nInput < 48 || nInput > 57)
{
Text = strText;
}
else
{
strText = Text;
}
这段代码有错误,你没有把按键字符传递给文本框啊。
第一个问题:可以添一个菜单项,将来其快捷方式设为Ctrl + W ,然后设该菜单项Visable = false,这是比较简洁,方便的方法。
第二个问题:不用那么麻烦,重载ProcessKeyPreview函数即可,判断按下的是不是数字键,如果不是则返回true,表明你已处理了这个消息,剩下的交给C# 。很简洁的方法。
IceboundRock
2003-12-16
打赏
举报
回复
这个是我继承得到的类,可是还有点bug,请大家指教
我override了TextBox的WndProc函数,但是第一个字母似乎总是处理不到
public class NumBox : System.Windows.Forms.TextBox
{
const int WM_KEYDOWN = 0x0100;
public NumBox()
{
//
// TODO: Add constructor logic here
//
strText = Text;
}
static string strText = null;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// TODO: Add NumBox.WndProc implementation
if(m.Msg == WM_KEYDOWN)
{
int nInput = m.WParam.ToInt32();
if(nInput < 48 || nInput > 57)
{
Text = strText;
}
else
{
strText = Text;
}
}
base.WndProc (ref m);
}
}
IceboundRock
2003-12-16
打赏
举报
回复
Ctrl+字母的keychar是从1-26,对应Ctrl+A--Ctrl+Z
IceboundRock
2003-12-16
打赏
举报
回复
第二个问题,你要继承TextBox,把KeyDown事件做一下处理,在输入显示之前判断输入的是否是数字。
internetibm
2003-12-16
打赏
举报
回复
private void FrmMain_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode==Keys.W && e.Control==true)
{
MessageBox.Show("按下两个");
}
}
这样没反应!
IceboundRock
2003-12-16
打赏
举报
回复
处理keypress,e.keychar == (char)23这种情况对应了Ctrl+W
加载更多回复(5)
winform
显示
提示框
,然后自动关闭
【代码】
winform
显示
提示框
,然后自动关闭。
.NET-6.
WinForm
1.学习经验总结
WinForm
学习经验总结前言一、pandas是什么?二、使用步骤1.输入文本框的验证1.实现
中
文符号不能输入2.实现不重复数字输入2.全选3.按钮是否可操作4.自动序号列5.小意思6.学习加载时2.全选2.全选总结 前言 提示:这里...
Winform
窗体程序 自动更新应用程序
本来是
想
在
一个
程序里更新,由于自身技术暂时不能实现,只能是分开两个程序。
一个
是主程序,
一个
是更新程序。 操作步骤:首先在服务器,可以是局域网内任意一台电脑当服务器,开启iis服务 在桌面搜索框键入 iis ...
winform
窗体(二)——控件
每
一个
窗体都有
一个
事件,这个窗体加载完成之后执行哪一段代码 位置:1)右键属性→事件→load 双击进入 2)双击窗体任意
一个
位置进入 删除事件:先将事件页面里面的挂好的事件删除,再删后台代码里面的事件 ...
winform
窗体控件(全)
回顾跟补充下除了昨天那常用6个其他的
winform
窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开;False的话会另起一行 (2)Enabled: False禁用该按钮ps:启动后
显示
(3)Visile:False...
C#
110,566
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章