Winform中Textbox、NumericUpDown等修改高度,禁止输入数字或内容的实现

简介: Winform中的Textbox、NumericUpDown控件通常在单行的情况下,无法直接通过`Height`属性修改高度,但很多时候我们需要调整其高度,使其显示的更加合理,主要介绍三种方法...

Winform中的Textbox、NumericUpDown控件通常在单行的情况下,无法直接通过Height属性修改高度,但很多时候我们需要调整其高度,使其显示的更加合理。下面主要介绍三种方法,推荐的做法是通过修改字体大小实现高度的修改

以及后面禁止输入指定内容的两种实现。

介绍

Textbox默认为单行模式,无法调整高度,如果在使用中发现TextBox文本框的高度不合适,就需要对单行模式的文本框修改高度。

新建TextBoxHeight项目

比如,下面填入姓名和年龄信息,调整Label提示文本的大小,明显可以看出大小不匹配。

要想修改Textbox的高度,可以通过下面几种取巧的方式实现。

设置AutoSize为false,再设置高度【不推荐】

保持单行模式,设置AutoSize为false,再设置高度。Textbox的AutoSize属性是被隐藏起来的,需要在代码里直接修改。

textBox1.AutoSize = false;
textBox1.Height = 28;

numericUpDown1.AutoSize = false;
numericUpDown1.Height = 28;

可以看到高度确实调整了,但是会导致显示的文本与控件自身的高度不符合,会有很大的留白。

将Textbox改为多行模式,屏蔽Enter键【不推荐】

设置TextboxMutliLine属性为true,允许修改Height高度,然后在 KeyDown 按键事件中屏蔽Enter键,防止换行,形成单行的效果。

textBox1.Multiline = true;
textBox1.Height = 28;
textBox1.KeyDown += TextBox1_KeyDown;

////
private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter) //  或 e.KeyValue == 13 或 (int)e.KeyCode == 13
    {
        // 指示按键事件是否应传递到基础控件
        // 如果为true,表示(Key)按键事件不应该发送到该控件
        e.SuppressKeyPress = true;
    }
}

可以看到,这种方式同样有着文字和高度不匹配的问题。

通过修改字体大小,间接改变Textbox、NumericUpDown的高度【推荐】

实际上,单行模式下可直接修改字体的大小,间接的实现高度的变化,NumericUpDown控件也同样适用。

实际测试,可以看到,控件的高度、字体的大小显示等,有着很好的匹配。

NumericUpDown控件的一些常用属性

  • Increment:指示每单击一下按钮时增加或减少的数量
  • DecimalPlaces:指示要显示的小数位数
  • Value:默认显示的数值
  • Maximum:最大值(不能超过)
  • Minimum:最小值(不能超过)
  • RightToLeft:将上下箭头和数字左右调换

Hexadecimal属性设置为true,用于在控件中显示十六进制值。

ThousandsSeparator属性设置为true,可以在十进制数字中显示千位分隔符。

DecimalPlaces属性设置要显示的小数的位数。

Textbox禁止输入数字的实现【利用e.SuppressKeyPress】

TextBoxKeyDown事件方法中,通过判断数字按键,设置e.SuppressKeyPress = true取消数字key事件发送到该控件。

如下,禁止输入数字:

private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 && e.Modifiers != Keys.Shift) || (e.KeyCode>=Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
    {
        e.SuppressKeyPress = true;
    }
}

Winform的键盘按键(key)事件中,可以通过e.KeyCode表示当前的按键。

Keys静态类的Keys.D0 ~ Keys.D9表示键盘顶部的数字键,通常结合Shift可以按下数字键上方的特殊符号。

Keys.NumPad0 ~ Keys.NumPad9表示键盘右侧的小的数字键盘上的数字

因此需用对此进行判断,并阻止其按键事件,实现禁止输入数字。

Textbox禁止输入数字或其他字符【使用TextChanged事件】

禁止输入 数字或者某指定的文字字符 的方法是 在TextChanged事件方法中,通过判断最新的字符是否为数字,如果是则删除该字符,否则保持不变。同样也可以实现禁止输入数字的功能。

在使用输入法时,一般不会触发Key按键事件,原则上按键事件被输入法程序捕获并转为对应的文字/字符内容,因此,使用输入法输入中文等字符时,基本就只能通过 TextChanged事件实现一些禁止输入的功能。

如下,是简单实现禁止输入特定文本字符的代码。errProvider作为窗体字段,用于错误提示;canNotInput也可以改为其他需要禁止输入的内容文字。

errProvider = new ErrorProvider();

textBox1.TextChanged += TextBox1_TextChanged;

//// ...........

// 实现禁止输入特定文本字符
private void TextBox1_TextChanged(object sender, EventArgs e)
{
    var txtBox= sender as TextBox;

    // 取消错误提示
    errProvider.SetError(txtBox, "");
    // 不为空时
    if (!string.IsNullOrWhiteSpace(txtBox.Text))
    {
        // "0123456789" 也可以改为其他需要禁止输入的内容文字
        var canNotInput = "0123456789";
        if (canNotInput.Contains(txtBox.Text[txtBox.Text.Length - 1]))
        {
            // 删除最后一个字符【两种方式】
            // txtBox.Text = txtBox.Text.Remove(txtBox.Text.Length - 1);
            txtBox.Text = txtBox.Text.Substring(0, txtBox.Text.Length - 1);

            // 重新赋值后光标会出现在最前面
            //txtBox.Focus(); // 通常需要设置文本框获取焦点再使用下面的Select到末尾,但是上面赋值已经有了光标,所以不需要
            // 设置光标位置到文本末尾
            txtBox.Select(txtBox.TextLength, 0);
            // 滚动控件到光标处
            txtBox.ScrollToCaret();

            // 给定一个错误提示
            //errProvider.BlinkStyle= ErrorBlinkStyle.AlwaysBlink;
            errProvider.SetError(txtBox, $"不行允许输入此中的字符:{canNotInput}");
        }
    }
}

运行效果如下:

通过代码将光标移动(定位)到文本框文字的末尾:

// 设置文本框获取焦点
txtBox.Focus();
// 设置光标位置到文本末尾
txtBox.Select(txtBox.TextLength, 0);
// 滚动控件到光标处
txtBox.ScrollToCaret();
相关文章
|
C# 索引 Windows
Winform控件优化之TabControl控件的使用和常用功能
TabControl是一个分页切换(tab)控件,不同的页框内可以呈现不同的内容,将主要介绍调整tab的左右侧显示、设置多行tab、禁用或删除tabpage、隐藏TabControl头部的选项卡等
8614 0
Winform控件优化之TabControl控件的使用和常用功能
|
API C# Windows
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Winform中实现无边框窗体只需要设置FormBorderStyle = FormBorderStyle.None,但是无边框下我们需要保留移动窗体、拖拽调整大小、自定义美观好看的标题栏等...
5802 0
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
|
C# 容器
Winform控件优化之TabControl控件的美化和功能扩展
在基本的TabControl控件使用和功能之上,可以尝试对其进行美化和功能扩展,比如动态删除或添加tab、绘制图标按钮及鼠标hover时的背景变化、Tab从右向左布局的优化处理等。最重要...
4021 0
Winform控件优化之TabControl控件的美化和功能扩展
|
C# 图形学 Windows
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
两行代码就能实现Form窗体的(背景)透明效果,它不是Opacity属性的整个窗体透明,`TransparencyKey`实现窗体的透明、窗体中间部分镂空效果...
4794 0
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
|
C# Windows 容器
C#或Winform中的消息通知之系统托盘的气泡提示窗口(系统toast通知)、ToolTip控件和ToolTipText属性
NotifyIcon控件表示系统右下角任务栏上的托盘图标,其ShowBalloonTip方法用于显示气球状提示框(Win10只有为本地Toast通知),ToolTip\oolTipText可以...
3732 0
C#或Winform中的消息通知之系统托盘的气泡提示窗口(系统toast通知)、ToolTip控件和ToolTipText属性
|
开发框架 前端开发 JavaScript
在Winform开发中,我们使用的几种下拉列表展示字典数据的方式
在Winform开发中,我们使用的几种下拉列表展示字典数据的方式
C#或Winform中的消息通知之自定义优雅漂亮的通知效果
Custom Notification自定义通知提示,一款非常优雅漂亮的自定义通知效果,主要介绍其实现思路、调整和优化...
1862 0
C#或Winform中的消息通知之自定义优雅漂亮的通知效果
|
开发框架 前端开发 JavaScript
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
668 2
|
算法 API C#
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)
最终优化实现ButtonPro按钮(继承自Button),既提供Button原生功能,又提供扩展功能,除了圆角以外,还实现了圆形、圆角矩形的脚尖效果、边框大小和颜色、背景渐变颜色...
3893 0
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)

热门文章

最新文章

下一篇
开通oss服务