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

wpf 自定义输入ip地址的文本框 - 详解

xmal

PS:因为是上位机,所以文本框里面写了键盘,如果不需要可删除。

cs

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace 项目
{
///
/// IPTextBox.xaml 的交互逻辑
///
public partial class IPTextBox : UserControl
{
public IPTextBox()
{
InitializeComponent();
}
///
/// 按下按键键前,判断哪些能输入
/// 只能输入数字 删除键 回车键 返回键 Tab键 左右方向键
/// 删除键、左右方向键 控制光标位置
///
private void TbxIP1_PreviewKeyDown(object sender, KeyEventArgs e)
{
Key key = e.Key;
if (sender is not TextBox tbx || tbx == null) { return; }
if ((key >= Key.D0 && key = Key.NumPad0 && key
/// 释放按键前,判断光标要做什么操作
///
private void TbxIP1_PreviewKeyUp(object sender, KeyEventArgs e)
{
Key key = e.Key;
if (sender is not TextBox tbx || tbx == null) { return; }
if ((key >= Key.D0 && key = Key.NumPad0 && key  255)
{
tbx.Text = "255";
return;
}
SetTbxFocus(tbx, true, true);
}
}
else if (key == Key.Delete)
{
// 无操作
}
else if (key == Key.Enter)
{
// 暂时不做操作
}
else if (key == Key.Back)
{
}
else if (key == Key.Tab)
{
// 暂时不做操作
}
else if (key == Key.Left)
{
}
else if (key == Key.Right)
{
}
else
{
// 不是上述按键,就不处理
e.Handled = true;
}
}
///
/// 设置当前输入框的前面或后面的输入框获取焦点,以及是否全选内容
///
/// 当前输入框
/// 是否是后面的输入框(false为前面的输入框)
/// 是否全选内容
private void SetTbxFocus(TextBox curretTbx, bool isBack, bool isSelectAll)
{
// 所有的ip输入框
var TbxIPList = new List();
foreach (UIElement item in GridIPAddress.Children)
{
if (item.GetType() != typeof(TextBox))
{
continue;
}
if (item is not TextBox tbx || tbx == null)
{
continue;
}
TbxIPList.Add(tbx);
}
// 要聚焦的输入框
TextBox? nextTbx = null;
// 往后
if (isBack)
{
// 当前输入框是前三个,那么就取后一个输入框
int index = TbxIPList.IndexOf(curretTbx);
if (index = 1)
{
nextTbx = TbxIPList[index - 1];
}
}
// 设置焦点 全选内容
if (nextTbx != null)
{
nextTbx.Focus();
if (isSelectAll)
{
nextTbx.SelectAll();
}
}
}
}
}

http://www.gsyq.cn/news/11064.html

相关文章:

  • 《密码系统设计》第三周
  • VS2022 不支持 .NET Framework 4.0 的解决方法
  • P3747 [六省联考 2017] 相逢是问候
  • 构建一个支撑10万设备的虚拟电厂IoT高效的平台
  • B1I、B1C、B2a双频北斗卫星定位芯片AT9850B-F7N-22
  • 2025 国产代码托管新局:Gitee 领跑本土生态 - 实践
  • Wi-Fi技能——网络安全
  • 完整教程:【开源】基于STM32的智能车尾灯
  • 机动数据集ESA
  • Scanner 和if
  • python自动化操作PDF
  • 完整教程:【数据结构】 ArrayList深入解析
  • 完整教程:PyCharm 在 Linux 上的安装指南
  • 分布式 ID 生成方案实战指南:从选型到落地的全场景避坑手册(二) - 指南
  • BUUCTF-babyheap_0ctf_2017题解(含详细过程与思路分析)
  • 【EF Core】框架底层的数据库连接管理
  • iNeuOS工业互联网操作系统,更新计量数据处理方式和在线报表,实现能源管理基础功能
  • 实用指南:Qt的数据库模块介绍,Qt访问SQLite详细示例
  • React自定义同步状态Hook - 详解
  • SpringBootMVC相关内容
  • 小柏实战学习Liunx(图文教程三十五)
  • HarmonyOS 5 通知与语音能力开发实战:从消息推送到智能语音交互
  • Keithley 万用表里测电阻分成两种模式
  • 实战:基于HarmonyOS 5构建分布式聊天通讯应用
  • HarmonyOS 5 高级动效实战:粒子系统、路径动画与物理动效开发
  • 全新 CloudPilot AI:嵌入 Kubernetes 的 SRE Agent,降本与韧性双提升!
  • HarmonyOS 5 性能优化全攻略:从启动加速到内存管理
  • HarmonyOS 5 网络编程与数据存储实战:从RESTful API到本地持久化
  • 浅谈当前时代下大学生的就业择业及人生规划
  • flink不同环境切换 - --