只允许在 winform 组合框中使用整数

本文关键字:整数 组合 winform | 更新日期: 2023-09-27 18:31:35

我目前正在用c#编写照片编辑器,目前正在设计允许钢笔工具更改大小的功能。除了一个问题外,它完美无缺。以下是一些背景信息:因此,在我拥有的组合框中,有10个项目,每个项目都是数字1 - 10。如果我选择一个,或直接在组合框中键入一些数字,它会将笔大小设置为该大小。问题是,如果我输入一个字母,它会给我一个

IndexOutOfRangeException

.

有没有办法使组合框只接受整数和浮点数?基本上我的意思是,如果我按 3,笔的大小将变为 3。但是如果我按 H,它什么也没做。

只允许在 winform 组合框中使用整数

此外,您可以使用按键处理程序来确保只键入数字。

private void txtPenToolSize_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

您可以执行两个选项之一。第一个选项是通过禁用键入来限制用户在组合中键入内容。这可以通过在page_load中提供此代码来实现

 comboBox1.DropDownStyle to ComboBoxStyle.DropDownList

或访问如下所示的值:

       if (int.TryParse(comboBox1.Text, out BreshSize))
        {
            // Proceed
        }
        else 
        { 
        //Show errror message
        }  

此实现应允许您查看新值是否为整数并采取相应操作。 当您开始检查值时,您会将其放在代码中。"2"将替换为您正在检查的字符串。

    int currInt = 0;
    int tryInt = 0;
    if(int.TryParse("2", out tryInt))
    {
        currInt = tryInt;         
    }
    else
    {
        //reset or display a warning
    }

一个通用实现,适用于具有不同系统小数分隔符(区域设置)的国际用户,并且 texbox/combbobox 不仅允许Int数字格式(双精度、浮点数、十进制等)。

    private void comboTick_KeyPress(object sender, KeyPressEventArgs e)
    {
        //this allows only numbers and decimal separators
        if (!char.IsControl(e.KeyChar) 
            && !char.IsDigit(e.KeyChar) 
            && (e.KeyChar != '.') 
            && (e.KeyChar != ',') )
        {
            e.Handled = true; //ignore the KeyPress
        }
        
        //this converts either 'dot' or 'comma' into the system decimal separator
        if (e.KeyChar.Equals('.') || e.KeyChar.Equals(','))
        {
            e.KeyChar = ((System.Globalization.CultureInfo)System.Globalization.CultureInfo.CurrentCulture)
                .NumberFormat.NumberDecimalSeparator
                .ToCharArray()[0];
            e.Handled = false; //accept the KeyPress
        }
    }