在列表中填写一个带有IP主机关系的文本框

时间:2014-01-08 11:21:35

标签: c# autocomplete textbox

我只是被这个封锁了,到处搜索但是有一个难以找到的

在我正在VS Express 2012中开发的windowsform C#应用程序中,我正在努力实现以下目标:

我有一个纯文本的IP主机名关系列表,如下所示:

99999 10.10.10.10
88888 10.10.10.11

共计1567行

在表格中我有两个文本框,一个带有自动完成功能(项目列表只是主机名),第二个应该显示输入主机名的IP,一旦用户从自动完成功能中选择主机名

很抱歉,但是我坚持这个,请帮忙 提前致谢

2 个答案:

答案 0 :(得分:1)

你不能创建一个课程吗?像这样

class ips
{
    public int ident;
    public string ip;
    public ips(int Ident, string Ip)
    {
        this.ident = Ident;
        this.ip = Ip;
    }
}
//fill the List
const int MAXELEMENTS = 512;

ips[] ipList = new ips[MAXELEMENTS];
ips ipa = new ips(1111, "10.10.10.1");
ips ipb = new ips(2222, "20.20.20.1");

然后激活SelectionChangeCommitted事件?

public Form1()
{
    ipList[0] = ipa;
    ipList[1] = ipb;

    InitializeComponent();
    cBox1.AutoCompleteMode = AutoCompleteMode.Append;
    for(int i = 0; i < ipList.Count(); i++)
    {
        if(ipList[i] != null)
           cBox1.Items.Add(ipList[i].ip);
     }
 }

 private void cBox1_SelectionChangeCommitted(object sender, EventArgs e)
 {
      tBox1.Text = Convert.ToString(ipList[cBox1.SelectedIndex].ident);
 }

我希望这能帮到你

答案 1 :(得分:1)

是的,我们将举例:

99999 10.10.10.10
88888 10.10.10.11

并将其解析为字典,如下所示:

private Dictionary<string, string> ParseText(string text)
{
    Dictionary<string, string> hostnameDictionary= new Dictionary<string, string>();
    foreach(var line in text.Trim().Split(Environment.NewLine)))
    {
        string[] textParts = line.Trim().Split(' ');

        if(textParts.Length == 2 && !hostnameDictionary.ContainsKey(textParts[0])
        {
            hostnameDictionary.Add(textParts[0], textParts[1]);
        }
    }
    return hostnameDictionary;
}

请注意,仅当其他地方没有空格时,上述内容才会起作用,因此如果主机名中有空格,则上述内容不会解析它。

使用上面的方法,您将获得一个使用主机名作为键的字典,因此您可以非常轻松地找到ip属于哪个字典,因此例如键入hostnameDictionary["99999"]将返回字符串{{1 }}

如果不清楚,或者您需要其他部分的帮助,请告诉我,我会更新答案。