当前位置: 首页 > news >正文

控件焦点_转移

转自 http://blog.csdn.net/candy1232009/article/details/7557729

在C#编程时,有时希望通过按回车键,控件焦点就会自动从一个控件跳转到下一个控件进行操作。 下面通过登录界面为例,讲解两种实现方法。

问题描述:

       以登录界面为例,当输入完用户名后, 若要输入密码,则密码对应的TextBox必须获得焦点, 一般的办法是用鼠标去点击就可以了。但是这样用户体验就会差一些(因为这样既要操作鼠标,又要操作键盘),其实可以实现按回车键就能自动获得下一个控件的焦点,这样直接用键盘输入就可以了,避免了鼠标的操作。

//解决办法一:  判断按键,手工跳转到指定法控件

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)   //  if (e.KeyValue == 13) 判断是回车键
            {
                this.textBox2.Focus();
            }
        }

//解决办法二: 根据控件TabIndex 属性顺序跳转

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Convert.ToChar(Keys.Enter))  
            {
                this.SelectNextControl(this.ActiveControl, true, true, true, true);  //需设置textBox的TabIndex顺序属性
            }
        }

//同样的方法,输入完成后,也可以按回车键直接登录

 private void textBox2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 13)
            {
                this.button1.Focus();
                button1_Click(sender, e);   //调用登录按钮的事件处理代码
            }
        }

Control.SelectNextControl 方法

/**
下面的代码示例演示具有用在某些控件的窗体中的 SelectNextControl 方法。 每次单击窗体都将激活下一个控件。 ActiveControl 属性在容器控件中获取当前激活的控件。
*/
private void Form1_Click(object sender, EventArgs e)
{
    Control ctl;
    ctl = (Control)sender;
    ctl.SelectNextControl(ActiveControl, true, true, true, true);
}

/**
下面的代码示例演示具有 Button 和用在其他某些控件的窗体中的 SelectNextControl 方法。 当单击 Button 时,将激活 Button 后的下一个控件。 请注意,您必须获取 Button 控件的父级。 由于 Button 不是容器,在 Button 上直接调用 SelectNextControl 不会更改激活。
*/
private void button1_Click(object sender, EventArgs e)
{
    Control p;
    p = ((Button) sender).Parent;
    p.SelectNextControl(ActiveControl, true, true, true, true);
}

最简单就是:

this.SelectNextControl(ActiveControl, true, true, true, true);

 

转载于:https://www.cnblogs.com/laymond/archive/2013/05/03/3056303.html

相关文章:

  • 第四次冲刺
  • 数据恢复软件如何换机使用?
  • C#格式化字符串,日期,时间,货币[转]
  • 共享充电宝也来跑马圈地 这只风口上的猪能飞的好吗
  • 阿里云移动数据分析服务使用教程
  • JavaScript教程网
  • WCF与ASP.NET Core性能比较
  • 小学徒成长系列—线程
  • PHP explode() 函数
  • (转载)Linux网络编程入门
  • 思维导图形式带你读完《大型网站技术架构》中
  • c# 泛型类型参数T的约束where
  • 云如何让App开发更简单?
  • Common方法
  • 区块链概况:商业价值
  • CAP理论的例子讲解
  • Fundebug计费标准解释:事件数是如何定义的?
  • github指令
  • Javascript编码规范
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Leetcode 27 Remove Element
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • PHP面试之三:MySQL数据库
  • Redash本地开发环境搭建
  • Yii源码解读-服务定位器(Service Locator)
  • 汉诺塔算法
  • 基于web的全景—— Pannellum小试
  • 前端临床手札——文件上传
  • 十年未变!安全,谁之责?(下)
  • 实习面试笔记
  • 原生Ajax
  • 追踪解析 FutureTask 源码
  • ionic异常记录
  • ​Java并发新构件之Exchanger
  • $.ajax()参数及用法
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (+4)2.2UML建模图
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (南京观海微电子)——COF介绍
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)nsfocus-绿盟科技笔试题目
  • .net 4.0发布后不能正常显示图片问题
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET MVC 验证码
  • .net 程序发生了一个不可捕获的异常
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net 知识杂记
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET中winform传递参数至Url并获得返回值或文件
  • ??eclipse的安装配置问题!??
  • @Valid和@NotNull字段校验使用
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [BetterExplained]书写是为了更好的思考(转载)