C#按回车Enter使输⼊焦点⾃动跳到下⼀个TextBox的⽅法收集
在录⼊界⾯中,⽤户往往需要按回车键时光标⾃动跳⼊下⼀个⽂本框,以⽅便录⼊操作。在C#中实现该功能有多种⽅法,以下是⼩编收集的不使⽤TAB键,⽽直接⽤回车键将光标转到下⼀个⽂本框的实现⽅法。
⼀、利⽤Windows消息模拟发送Tab键
将各个TextBox的TabIndex属性按顺序编号1、2、3……,然后将TextBox的TabStop属性置为True,在每⼀个TextBox的键盘按下事件中,执⾏以下代码即可(各个TextBox可共⽤同⼀个键盘按下事件)。
///<summary>
///⿏标按键事件。
///如果检查到按下的是回车键,则发⼀个消息,模拟键盘按以下Tab键,以使输⼊焦点转移到下⼀个⽂本框(或其他焦点可停留的控件)
///</summary>
///<param name="sender"></param>
///<param name="e"></param>textbox控件边框设置
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
SendKeys.Send("{tab}");
}
}
⼆、⼿动置下⼀个需要获取焦点的⽂本框
如果想让焦点跳到任意⽂本框或者其他地⽅, 在⽂本框的键盘按下事件中,将焦点放到⽬标⽂本框上。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
textBox2.focus(); //当在⽂本框1中检查到回车键时,直接将焦点转⼊TextBox2
}
}
三、利⽤控件的SelectNextControl函数
按⽅法⼀中设置好TextBox的TabIndex和TabStop属性,在C# 回车Enter事件中,调⽤控件的SelectNextControl函数,是的输⼊焦点跳到下⼀个TextBox(⽂本框)。
以下⽰例是在窗⼝显⽰控件中,统⼀为TextBox的⿏标按下KeyDown事件添加处理函数。(⽰例来⾃红⽇的百度空间)
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
foreach (Control ct in this.Controls)
{
TextBox tx = ct as TextBox;
if (tx != null)
{
tx.KeyDown += (sender, e_args) =>
{
if (e_args.KeyCode == Keys.Enter)
{this.SelectNextControl(tx, true, true, false, true);}
}
}
四、偷梁换柱,将回车键替换成Tab键
先设置这些控件的Tab顺序,然后在窗体的后台代码中添加如下函数就可以了
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter) // 按下的是回车键
{
foreach (Control c in this.Controls)
{
if (c is System.Windows.Forms.TextBox) // 当前控件是⽂本框控件
{
keyData = Keys.Tab;
}
}
keyData = Keys.Tab;
}
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessDialogKey(Keys keyData)
{
if ((ActiveControl is TextBox || ActiveControl is ComboBox) &&
keyData == Keys.Enter)
{
keyData = Keys.Tab;
}
return base.ProcessDialogKey(keyData);
}
五、C#WinForm⾃动跳转回车问题
有个TEXTBOX输⼊框!属性设置了可以换⾏multiline设置了True!在keydwon加了换下⼀个输⼊框的命令
private void textDisease_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
{
textOrganization.Focus();
textOrganization.SelectAll();
}
}
在换到下⼀个时,原来的输⼊框也会加了个有回车!如何处理掉这个回车!
解决⽅法1:设置按键的e.Handled属性
textDisease_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
{
e.Handled = True
textOrganization.Focus();
textOrganization.SelectAll();
}
}
加⼀句e.Handled = True。⽬的是让系统不要处理该Enter按键。
解决办法2:使⽤textChange事件
private void textDisease_TextChanged(object sender, EventArgs e)
{
textDisease.Text = textDisease.Text.Trim().Replace("\r\n", "");
}
六、在⽹页程序中不使⽤TAB键直接⽤回车键将光标转到下⼀个⽂本框的⽅法
在C#.NET中,可以使⽤JaveScript脚本实现不使⽤TAB键,⽽直接⽤回车键将光标转到下⼀个⽂本框。
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="回车使下⼀个⽂本框得到焦点.WebForm1" %> <script language=javascript>
function setfocus() { document.all.t2.focus(); }
</script>
七、如何在⽂本框输⼊框⾥按回车键,光标⾃动跳转到下⼀个⽂本框输⼊框或者是执⾏某按钮的提交?
这两个问题的本质是⼀样的,⼀般是借助客户端脚本来解决,举例如下。
<%@ Page Language="C#" %>
<script runat="server">
protected void Button_Click(object sender,EventArgs e)
{
Lable1.Text="您点击了:"+((Button)sender).Text;
}
protected void Page_Load(object sender,EventArgs e)
{
int TextBoxNum=4;
for(int i=1;i<=TextBoxNum;i++)
{
if(i!=TextBoxNum)
{
((TextBox)form1.FindControl("TextBox"+i.ToString())).Attributes.Add("onkeydown","TabNext(event,'0','"+((TextBox)form1.FindControl("TextBox+(1+i).ToString())).ClientID+'")"); }
else
{
((TextBox)form1.FindControl("TextBox"+i.ToString())).Attributes.Add("onkeydown","TabNext(event,'"+Button2.ClientID+'",)");
}
}
}
</script>
在页⾯中有⼀个form1的表单,4个TextBox,还有⼀个BUtton2按钮,⼀个Label1,在页⾯中添加下列javascript脚本:
<script language="javascript" type="text/javascsript">
function TabNext(e,s1,s2)
{
if(window.event)//ie
{
keynum=e.KeyCode
}
else if(e.which)//netscape,firefox,opera
{
keynum=e.which
}
if(keynum==13)
{
if(s1=="0")
{
}
else
{
}
if(window.event)
{
e.cancelBubble=true;
}
else if(e.which)
{
}
}
}
</script>
记得要把button2的onclick的onclick事件绑定到button_click上。在使⽤这个⽅法时,注意TextBox控件的ID的命名规则
TextBox1,TextBox2,和对应的客户端的ID属性。TextBox的Focus()⽅法允许程序在服务器端设置⽂本框的焦点..
⼋、回车焦点⾃动跳到下⼀个TEXTBOX
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml" >
<head runat="server">
<title>⽆标题页</title>
<script language=javascript>
<!--
function setfocus()
{
if(event.keyCode==13)
{
event.keyCode=9
}
}
// -->
</script>
</head>
<body>
<form id="Form1" onkeydown="setfocus()" runat="server">
<DIV align="left">
<asp:TextBox id="TextBox1" runat="server" ></asp:TextBox></DIV>
<DIV align="left">
<asp:TextBox id="TextBox2" runat="server"></asp:TextBox></DIV>
<DIV align="left">
<asp:TextBox id="TextBox3" runat="server"></asp:TextBox></DIV>
<DIV align="left"> </DIV>
<DIV align="left">
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button></DIV> </form>
</body>
</html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论