从.txt文件每一行的特定位置自动完成textBox

时间:2018-11-09 20:50:21

标签: c#

我有一个名为“ textBoxCliente”的文本框,当我从.txt文件中写入时,希望它显示建议。 我要从.txt文件中显示的建议位于位置1“ parts [1]”中,每个位置都与字符“ |”分开。

我的.txt文件是这样的:

  • 1|Rui|Lisboa|rui@hotmail.com|912345324|14/01/2000|89564352|Empresa
  • 2 | Henrique | Evora | henrique@hotmail.com | 914445324 | 17/05/2001 | 55464352 |特殊情况
  • 3 | Andre | Agueda | andre@hotmail.com | 932415374 | 12/11/1996 | 23456743 |特殊情况
  • 4|Pedro|Aveiro|pedro@hotmail.com|965342163|30/03/2002|98645372|Empresa

我的代码是:

public partial class Vender : UserControl
{
    public Vender()
    {
        InitializeComponent();
    }

    string dir = (Environment.CurrentDirectory + "/Bd/clientes.txt");
    string[] sug = new string[File.ReadAllLines(Environment.CurrentDirectory + 
        "/Bd/clientes.txt").Count()];

    private void textBoxCliente_TextChanged(object sender, EventArgs e)
    {
        carrSug();

        for (int i = 0; i < sug.Length; i++)
        {
            textBoxCliente.AutoCompleteCustomSource.Add(sug[i]);
        }

        textBoxCliente.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    }

    private void carrSug()
    {
        string[] lines = File.ReadLines(dir).ToArray();
        int nLine = File.ReadAllLines(dir).Count();

        for (int j = 0; j <= nLine - 1; j++)
        {
            string[] parts = lines[j].Split(new char[] { '|' });
            sug[j] = parts[1];
        }
    }
}

我所做的是使用“ string [] sug”保存每行的位置1的值,然后使用它来显示建议。

1 个答案:

答案 0 :(得分:0)

作为一名程序员,请善于仔细阅读。这是AutoCompleteCustomSource的文档:

  

获取或设置一个自定义System.Collections.Specialized.StringCollection以在 System.Windows.Forms.TextBox.AutoCompleteSource属性设置为CustomSource 时使用。

重点矿区

请参阅上面的粗体部分,请确保您这样做:

textBoxCliente.AutoCompleteSource = AutoCompleteSource.CustomSource;

此外,您不需要在每次用户键入时都执行此操作。每次文本更改时,都会调用事件处理程序textBoxCliente_TextChanged。而是将代码放在构造函数中或窗体的load事件中。


一些建议

为您的方法提供有意义的名称。例如,carrSug()不是很有意义。另外,它不遵循C#编码约定-看起来像Java。同样,保持方法的凝聚力。您正在carrSug()中进行建议的某些部分,然后在textBoxCliente_TextChanged中进行某些建议。这是一种更有意义的方法:

private AutoCompleteStringCollection clientSuggestions;
private void LoadClientSuggestions()
{
    this.clientSuggestions = new AutoCompleteStringCollection();
    string[] suggestionsFromFile = File.ReadLines("YourPath.txt").Select(x => x.Split('|').Skip(1).First()).ToArray();
    this.clientSuggestions.AddRange(suggestionsFromFile);
}

上述方法使用Ling,因此请确保导入:using System.Linq;

这里是使用方法(将此代码放入表单的构造函数或Load方法中):

this.LoadSuggestions();
this.textBoxCliente.AutoCompleteSource = AutoCompleteSource.CustomSource;
this.textBoxCliente.AutoCompleteCustomSource = this.clientSuggestions;
this.textBoxCliente.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

为什么我在方法名称中添加单词Load?因为它什么也没返回,所以Load增加了意义。

另外,停止多次写入同一字符串:

"/Bd/clientes.txt"

将该常数设为一个常数,以便在需要更改时将其更改为一个位置。