Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文本框字符串拆分为数组并按数组索引C显示在标签中_C#_Arrays - Fatal编程技术网

C# 将文本框字符串拆分为数组并按数组索引C显示在标签中

C# 将文本框字符串拆分为数组并按数组索引C显示在标签中,c#,arrays,C#,Arrays,我被困在编程入门课的作业中,无法通过我的导师的建议来生成任何工作代码 任务: 用户将键入由空格分隔的全名。当BTNGETNEX被按下时,你的程序将分析文本框并提取第一个名字并将其放在第一个名称标签中,中间名中的中间名和最后的姓氏到姓氏标签中,假设它们都存在。 如果只输入一个姓名,则假定它是姓氏,并将名字和中间名留空 如果有两个条目,Joe Smith假定这是第一个和最后一个条目 如果文本框中有三个条目,则假定其中包括名字、中间名和姓氏 如果没有输入,请将所有标签留空 如果输入的条目超过三条,则向

我被困在编程入门课的作业中,无法通过我的导师的建议来生成任何工作代码

任务: 用户将键入由空格分隔的全名。当BTNGETNEX被按下时,你的程序将分析文本框并提取第一个名字并将其放在第一个名称标签中,中间名中的中间名和最后的姓氏到姓氏标签中,假设它们都存在。 如果只输入一个姓名,则假定它是姓氏,并将名字和中间名留空

如果有两个条目,Joe Smith假定这是第一个和最后一个条目

如果文本框中有三个条目,则假定其中包括名字、中间名和姓氏

如果没有输入,请将所有标签留空

如果输入的条目超过三条,则向用户发送错误消息,请擦除文本框并将光标放回文本框中

如有必要,使用if/then或try/catch防止发生错误

使表单看起来有点专业。 提示:

将文本框拆分为数组。使用arrayname.count确定创建了多少个条目以及数组中有多少项。使用if/then/else来决定如何填充名称标签。在按钮单击事件处理程序中,这应该需要少于7行代码

例如:

           if (myarray.count==1)
            {
                lblLast.text=myarray[0].ToString();
                //I would wipe out the contents in the other labels here
            }
           else if(myarray.count==2)
            {

                ...

            }
我被困了几个小时——可能是因为我对其他事情感到沮丧,但我无法在我的标签上显示任何东西。在一次讲座中,教授分享了列表字符串。。。作为将字符串拆分为数组所需的格式。 这就是我现在在btnGetName下的内容:

    private void btnGetName_Click(object sender, EventArgs e)
    {
        string txtFullName = "";
        List<string> namesArray = txtFullName.Split(' ').ToList();
        namesArray.Count();

        foreach (string name in namesArray)
        {
            if (namesArray.Count == 1)
            {
                lblLast.Text = namesArray[0].ToString();
            }
            else if (namesArray.Count == 2)
            {
                lblFirst.Text = namesArray[0].ToString();
                lblLast.Text = namesArray[1].ToString();
            }
            else if (namesArray.Count == 3)
            {
                lblFirst.Text = namesArray[0].ToString();
                lblMiddle.Text = namesArray[1].ToString();
                lblLast.Text = namesArray[2].ToString();
            }
        }

通过查看示例,您的列表namesArray为空。您正在获取一个空字符串并将其拆分,这只会给您一个空列表

您应该是这样的,其中inputText是用户将输入名称的编辑文本元素:

string txtFullName = inputText.Text;
List<string> namesArray = txtFullName.Split(' ').ToList();
我还想补充一点,foreach循环是冗余的;实际上,您是在一次又一次地分配3个标签,直到它到达循环的末尾。移除foreach块,但保留其内容


再进行一次编辑,另一个巨大的冗余就是对namesArray中的每个项强制转换.ToString,根据定义,它是一个字符串列表。您可以安全地删除这些额外呼叫。

嗨,凯蒂,欢迎使用堆栈溢出!我认为你应该从创造一个新的开始。事实上,我认为如果你这样做,你可能会解决问题。您现在正在同时考虑所有的问题,但听起来您只需要考虑一个问题:如何在标签中显示内容!然后,我认为你应该把你的问题编辑得更短一些,并特别询问如何在标签中显示文本,因为这就是你被卡住的地方。谢谢非常感谢。我完全理解这个修复方法,也理解为什么foreach/.tostring是多余的,我想我会把它都扔进去以防万一。现在我遇到了另外两件事。我已经添加了inputText.Text;,但它“在当前上下文中不存在”,无论是否带有.Text。说真的,你帮了我一个周末。我有一秒钟快要淹死了。@katies1987在我的示例中,inputText元素是任意的;在winforms designer中,需要使用希望用户在名称中输入的编辑文本框的Id。因此,您可以在设计器中创建编辑文本->单击它->转到属性并查找/编辑Id属性。在示例中,这是您应该用来代替我的inputText的内容。如果我的回答帮助了你,你应该考虑把它标记为被接受!明白了。用户输入是txtFullName,所以我交换了它…但它仍然不工作。这就是我被困的地方。@katies1987你介意描述一下你所说的什么仍然不起作用吗?intellisense是否在成员下方给您一条错误红线,如果是,它会说什么?编译器是否抛出异常,如果抛出异常,消息会说什么?它只是没有产生任何/预期的结果吗?当然,intellisense给了我:CS0103名称“txtFullName”在当前上下文中不存在,我也得到了一个生成错误,但没有解释。