C# - 如果字符串为空或有空格,则禁用按钮?

时间:2014-03-03 10:04:27

标签: c# .net winforms button user-interface

我刚开始学习C#。

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    object Nappi1 = ("Nice button");
    MessageBox.Show(Nappi1.ToString());
}

我有一个文本框,如果为空或空格,则应禁用button1

我已经在某个级别上工作了,但它会检查textboxbutton1_Click的状态。

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1 = "") 
    {
        button1.enabled = false;
    }
    else 
    {
        button1.enabled = true;
        object Nappi1 = ("Nice button");
        MessageBox.Show(Nappi1.ToString());
    }
}

虚构的例子:

 if (textBox1 = "" or textBox1 = whitespace[s])

  1. 我怎样才能检查textbox onLoad的状态(一旦程序启动)?
  2. 如何检查是否(多个)whitespace,是否可以将其写入同一if -statement?
  3. 请保持简单。

6 个答案:

答案 0 :(得分:8)

准确回答问题标题,更短,更清楚:

button1.Enabled = !string.IsNullOrWhiteSpace(textBox1.Text);

答案 1 :(得分:4)

如果if-else只是string

,请将其替换为if
if (string.IsNullOrWhiteSpace(textBox1)) {
    button1.enabled = false;
}
else {
    button1.enabled = true;
    ...
}

或使用textBox1.Text如果它真的是Textbox则使用此:

if (string.IsNullOrWhiteSpace(textBox1.Text)) {
    button1.enabled = false;
}
else {
    button1.enabled = true;
    ...
}

答案 2 :(得分:3)

您需要String.IsNullOrWhiteSpace:

if (String.IsNullOrWhiteSpace(textBox1.Text)) {
    button1.enabled = false;
}

你最初有:

if (textBox1 = "") {
button1.enabled = false;
}

textbox是控件,您需要使用Text属性,该属性引用文本框控件中的字符串文字。同样在C#中=是一项作业,理想情况下您需要==用于比较。

如果您未使用.NET 4.NET 4.5,则可以使用:

String.IsNullOrEmpty

答案 3 :(得分:0)

这可以通过将事件处理程序挂钩到文本框文本更改事件来完成。 步骤进行:

  1. 附加文本框的事件处理程序(更改文本) 在文本内部更改了事件处理程序启用/禁用按钮。

    private void textBox1_TextChanged(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(textBox1.Text)) button1.Enabled = false; else button1.Enabled = true; }

  2. 默认情况下,禁用表单

    的InitializeComponent方法中的按钮

    button1.Enabled = false;

答案 4 :(得分:0)

在textBox1文本已更改事件中,右键此代码:

button1.Enabled = !string.IsNullOrWhiteSpace(textBox1.Text);

string.IsNullOrWhiteSpace(“some text”)将检查文本是否为无或仅为权重空间 如果这是真的,你将button1.Enabled设置为false。

答案 5 :(得分:-1)

C#不是我的初恋,所以可能会有一些语法错误。

如果Text不是null,则TextBox1属性不会是null,因此检查它是没有意义的。 您最好检查Textbox对象是否为空。

如果容易这样做,应该避免将字符串或字符类型相互比较。 因此,要检查TextBox1.Text是否为空,我将使用length的字符串TextBox1.Text属性。

最后,关于检查空格。这取决于你是否正在寻找任何空格(即单词之间的空格),或者整个值是否为空格。

If (Textbox1.Text.Length > 0) {
  // First Condition: Checking whether the whole value is a space
  Button1.Enabled = string.IsWhitespace(Textbox1.Text);
  // Alternative First Condition: Button1.Enabled = Textbox1.Text.ToList().All(Char.IsWhitespace);

  // Second Condition: Checking for the existence of spaces (whitespace characters) in the string
  Button1.Enabled = !(TextBox1.Text.ToList().Any(Char.IsWhitespace));
} else {
  Button1.Enabled = False; 
}

无论如何,我想向您介绍通用列表(即List(char))和逆变方法(即AllAnyFindAll)。

您当然可以将TextBox.Text控件属性(或输入)的集合放在一个新的通用List(of string)中并应用此方法:

List(of string) l_tb_RequiredText = {TextBox1.Text, TextBox2.Text, TextBox3.Text};

Button1.Enabled = !(l_tb_RequiredText.Any(string.IsNullEmptyWhitespace));

注意最后一个方法不会检查字符串中字母数字字符之间是否存在空格。


要检查列表(字符串)集合的字符串项目中字母数字字符之间是否存在空格,可以定义自己的函数并将“addressof”传递给通用列表方法。这是无缝的(并且不那么富有表现力)c#中的过程..你只需创建函数..

public bool hasSpaceInString(string value) {
   return !(value.ToList().Any(Char.IsWhitespace));
}

然后,传递函数......

List(of string) l_tb_RequiredText = {TextBox1.Text, TextBox2.Text, TextBox3.Text};

Button1.Enabled = !(l_tb_RequiredText.Any(hasSpaceInString));

这里实际发生的是泛型方法将函数指针(或delegate)作为参数。委托人的签名必须与通用列表实例中定义的IEnumerable类型相当。由于我们在IEnumerable(of string)中使用List(of string),我们必须传递delegate一个字符串作为参数。

此外(在c#3.0之后),您可以使用 Lambda表达式创建delegate并在运行时将其附加到匿名函数http://msdn.microsoft.com/en-us/library/bb397687.aspx