c#Windows窗体,根据用户输入在文件中搜索字符串,返回整行

c#Windows窗体,根据用户输入在文件中搜索字符串,返回整行,c#,string,file,search,windows-forms-designer,C#,String,File,Search,Windows Forms Designer,假设我有一个.txt文件,其中包含以下内容: 软件152,软件工程,20,S1,0,0,0.3,55,0.7,65 SOFT155,沉浸式介绍,20,S1,0,0,0,0,0,1.0,92 NET103,基础设施原理,20,S2,0,0,0.5,70,0.5,80 Soft153,编程结构和算法原理,20,S2,0.4,56,0,0,0,0.6,75 ISAD 151,数据库开发,20,S1,0.4,60,0,0,0.6,92 MATH160PP,量子宇宙,20,S1,0,0,0,0,1.0,8

假设我有一个.txt文件,其中包含以下内容:

软件152,软件工程,20,S1,0,0,0.3,55,0.7,65

SOFT155,沉浸式介绍,20,S1,0,0,0,0,0,1.0,92

NET103,基础设施原理,20,S2,0,0,0.5,70,0.5,80

Soft153,编程结构和算法原理,20,S2,0.4,56,0,0,0,0.6,75

ISAD 151,数据库开发,20,S1,0.4,60,0,0,0.6,92

MATH160PP,量子宇宙,20,S1,0,0,0,0,1.0,84

如何根据用户在文本框中所写内容并按下按钮(例如“查找”)在这些行中搜索特定字符串

然后返回整行并将每个变量放入文本框中(用户可以编辑任何值等),如下所示:

我已经成功地使用这段代码实现了这一点,它给出了我想要的输出,但是我不知道如何根据用户输入更改“字符串引用”:

        try
        {
            using (StreamReader reader = new StreamReader(fileName))
            {
                string citation = "SOFT155";

                while (!reader.EndOfStream)
                {
                    var lines = File.ReadAllLines(fileName);

                    lineFromFile = reader.ReadLine();

                    List<string> matchedList = new List<string>();

                    string[] linesArr = File.ReadAllLines(fileName);

                    //find matches
                    foreach (string s in linesArr)
                    {
                        if (s.Contains(citation))
                        {
                            matchedList.Add(s); //matched
                        }
                    }

                    //output
                    foreach (string s in matchedList)
                    {
                        string citationLine = s;
                        string[] lineData = citationLine.Split(',');
                        programmeNameLabel.Text = lineData[0];
                        stageNumberLabel.Text = lineData[1];
                        selectedModuleLabel.Text = lineData[2];
                        moduleTitleTextBox.Text = lineData[3];
                        creditsTextBox.Text = lineData[4];
                        semesterTextBox.Text = lineData[5];
                        examWeightingTextBox.Text = lineData[6];
                        examMarkTextBox.Text = lineData[7];
                        testWeightingTextBox.Text = lineData[8];
                        testMarkTextBox.Text = lineData[9];
                        courseworkWeightingTextBox.Text = lineData[10];
                        courseworkMarkTexbox.Text = lineData[11];
                    }
                }
这是应用程序运行时的外观:


谢谢大家

按照David的建议,使用文本框:

string citation = textBoxCitation.Text;

PS:这是建设性的批评:您声明了一些不使用的变量。此外,您的最后一个foreach是无用的,因为无论“matchedList”有多大,您的程序都只会显示最后一个结果。您可以做更多的事情来改进代码,但我认为最后一个foreach更容易开始?但是,我已经尝试过了,因为我想在按下按钮后使用它,我不知道如何在(例如)“editModuleButton\u Click”中访问“字符串引用”您可以将其设置为表单字段或属性,而不是局部变量,然后从这两个位置访问它。关于如何实现这一点,有很多教程,我不明白您为什么要在这里解决这个问题?一个小建议-您可能不想调用
ReadAllLines
两次。
                    string[] lineOfContents = File.ReadAllLines(fileName);
                    foreach (var line in lineOfContents)
                    {
                        string[] tokens = line.Split(',');
                        editModuleComboBox.Items.Add(tokens[2]);
                        deleteModuleComboBox.Items.Add(tokens[2]);
                    }
string citation = textBoxCitation.Text;