我有一个名为“ textBoxCliente”的文本框,当我从.txt文件中写入时,希望它显示建议。 我要从.txt文件中显示的建议位于位置1“ parts [1]”中,每个位置都与字符“ |”分开。
我的.txt文件是这样的:
我的代码是:
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的值,然后使用它来显示建议。
答案 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"
将该常数设为一个常数,以便在需要更改时将其更改为一个位置。