c# - 如何将文本框值转换为整数

标签 c# winforms

我的 C# Windows 窗体应用程序中有一些文本框。我想执行以下操作:

inRed = Convert.ToInt32(tbRed.Text.ToString().Length < 0 ? tbRed.Text = "0" : tbRed.Text);
inGreen = Convert.ToInt32(tbGreen.Text.ToString().Length < 0 ? tbGreen.Text = "0" : tbGreen.Text);
inBlue = Convert.ToInt32(tbBlue.Text.ToString().Length < 0 ? tbBlue.Text = "0" : tbBlue.Text);

inCyan = Convert.ToInt32(tbCyan.Text.ToString().Length < 0 ? tbCyan.Text = "0" : tbCyan.Text);
inMagenta = Convert.ToInt32(tbMagenta.Text.ToString().Length < 0 ? tbMagenta.Text = "0" : tbMagenta.Text);

如果文本框没有值,输入一个0并转换为整数,否则将文本框的值转换为整数。

inCyan 出现以下错误,其中文本框为空:

Input string was not in a correct format.

我怎样才能实现我的目标?

最佳答案

代替Convert.ToInt32,使用Int32.TryParse .这会为您提供有关它是否为有效整数的反馈。例如

String textboxValue = "1";
Int32 i;
if (!String.IsNullOrWhitespace(textboxValue) && // Not empty
    Int32.TryParse(textboxValue, out i)) { // Valid integer
  // The textbox had a valid integer. i=1
} else {
  // The texbox had a bogus value. i=default(Int32)=0
  // You can also specify a different fallback value here.
}

作为后续,String.IsNullOrWhitespace如果提供了值,则可以轻松破译,但(取决于您的 .NET 版本)可能不可用(并且您可能只有 String.IsNullOrEmpty

如果需要的话,polyfill 是一些很长的行:

Boolean SringIsNullOrWhitespace(String input)
{
    return !String.IsNullOrEmpty(input) && input.Trim().Length > 0;
}

此外,如果您发现自己经常尝试执行此解析,则可以将其重构为辅助类:

public static class ConvertUtil
{
    public Int32 ToInt32(this String value)
    {
        return ToInt32(value, default(Int32));
    }
    public Int32 ToInt32(this String value, Int32 defaultValue)
    {
#if NET4
        if (!String.IsNullOrWhiteSpace(value))
#else
        if (!String.IsNullOrEmpty(value) && value.Trim().Length > 0)
#endif
        {
            Int32 i;
            if (Int32.TryParse(value, out i))
            {
                return i;
            }
        }
        return defaultValue;
    }
}

// explicit
inRed = ConvertUtil.ToInt32(tbRed.Text, 0/* defaultValue*/);
// As extension
inRed = tbRed.Text.ToInt32(0/* defaultValue*/);

关于c# - 如何将文本框值转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29606953/

相关文章:

c# - asp.net 身份表未创建

c# - 在已经正常运行的应用程序中的 WPF/C# 中撤消重做

c# - 使用 FileStream 创建文件并应用 FileAttributes

c# - 如何为 ContextMenuStrip 项设置图像?

c# - 我可以为 .NET Windows 窗体窗口中的工具提示设置无限的 AutoPopDelay 吗?

c# - 当表单的类变得太大时怎么办?

c# - .net 中 string.Format (".... {0}....{1}....",v1,v2) 的替代品?

c# - 确定哪个应用程序正在阻止关机

winforms - 为什么 WinForms DateTimePicker 支持最大值 12/31/9998 23 :59:59, 而不是 12/31/9999 23:59:59

c# - 在 DataGridView 上移动行时的可视标记