A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar < '0' || e.KeyChar > '9')//对照ASCII码表条件之外的字符不是数字
            {
                e.Handled = true;//Handled属性为true,用户不能输入条件之外的字符
            }
            if(textBox1.SelectionStart==0&&e.KeyChar=='0')
            {
                e.Handled = true;
            }
            if(e.KeyChar==8)//BS 退格键对应8
            {
                e.Handled = false;//Handled为false,用户能输入退格键
            }
        }
老师讲如果另一个textbox要使用这个方法,需要父类转回子类
TextBox textbox=sender as TextBox;
不过我没有这行代码,另一个textBox控件同样能调用这个方法。
这其中有什么问题吗?

1.jpg (15.73 KB, 下载次数: 36)

1.jpg

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

5 个回复

倒序浏览
可以调用,但是 if(textBox1.SelectionStart==0&&e.KeyChar=='0')这句就不会作用在另一个控件上,注意粗体标出来的地方

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
if(textBox1.SelectionStart==0&&e.KeyChar=='0')刚才还能作用到另一个控件上  现在又不能了。。。。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
if(textBox1.SelectionStart==0&&e.KeyChar=='0')
            {
                e.Handled = true;
            }

但下一个文本框textbox2 就可以在最开始输入0了,视频里应该有讲

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
TextBox textbox=sender as TextBox;
{
if (e.KeyChar < '0' || e.KeyChar > '9')//对照ASCII码表条件之外的字符不是数字
{
e.Handled = true;//Handled属性为true,用户不能输入条件之外的字符
}
if(textBox1.SelectionStart==0&&e.KeyChar=='0')
{
e.Handled = true;
}
if(e.KeyChar==8)//BS 退格键对应8
{
e.Handled = false;//Handled为false,用户能输入退格键
}
}
---------------------------------------------------------------------------------
上面TextBox1要改为TextBox,因为sender传过来的就是触发控件的对象,当多个textbox控件共用一个方法时,
传过来的对象也就不同,就要定义一个textbox类型textbox,把sender转成textbox类型,也就是父类object转换子类textbox。
这时,在方法里就不能用某个控件名"textbox1"了,应改成textbox,这个textbox指的是触发的控件,而不是某个控件。
如果你写的是textbox1,那么就只有textbox1那个控件才会有事件触发效果。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
调用当然可以调用,但是你其它来调用这个事件的控件就实现不了下面的这句话
if(textBox1.SelectionStart==0&&e.KeyChar=='0')
{
e.Handled = true;
}

老师讲了,你想要让一个事件用于关于多个控件对象,你就得不能写死对象名,而sender就表示调用的那个对象,我们就可以把sender转化为我们调用该事件的控件类型,这样我们就不用担心是谁调用了,这样是该类型的控件类型,就都可以使用该事件。。。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马