在复选框中看不到新添加的项目

本文关键字:添加 项目 复选框 看不到 新添加 | 更新日期: 2023-09-27 18:13:41

我正在编写一个c#程序,其中有一个checkkedlistbox host_listbox .

在我的代码中,我有一个向checkedlistbox添加新项目的选项。当我完成添加新项目时,我无法在我的checkedlistbox中看到新添加的项目,直到程序关闭并再次运行。

我试过了

Refresh()
BeginUpdate()
EndUpdate() 

但他们不工作。

添加新项完成后,在checkedlistboxITEMS中显示新添加的项,但没有显示。

谁能给我建议一些其他的方法使它工作?
public static void fill_checkboxlist()
{
    host_listbox.Items.Clear();
    host_listbox.BeginUpdate();
    foreach (KeyValuePair<string, host_config> hlitem in host_list)
    {
        string sitem = hlitem.Key;
        if (host_list[sitem].sessionOptions == null)
            host_list[sitem].sessionOptions = new SessionOptions();
        host_list[sitem].sessionOptions.Protocol = Protocol.Sftp;
        host_list[sitem].sessionOptions.HostName = host_list[sitem].ip;
        host_list[sitem].sessionOptions.UserName = host_list[sitem].username;
        host_list[sitem].sessionOptions.Password = host_list[sitem].password;
        host_list[sitem].sessionOptions.PortNumber = Convert.ToInt32(host_list[sitem].port);
        //host_list[sitem].sessionOptions.SshHostKeyFingerprint = host_list[sitem].rsa;
        host_listbox.Items.Add(hlitem.Key.ToString(), false);
    }  
    host_listbox.Refresh();
}

在复选框中看不到新添加的项目

您忘记在方法末尾添加这个命令了:

host_listbox.EndUpdate();

当你调用fill_checkboxlist() form XXXX_Load方法时,省略这一行将无法工作。我也不认为你绝对需要调用Refresh方法…

如果你仍然有问题,试着检查一下:

在xxxx .Designer.cs文件中查看#region Windows窗体设计器生成的代码。在那里,您将看到生成的代码,可能会有一些您看不到的东西导致您的问题。应该是这样的:

        //
        // host_listbox
        // 
        this.host_listbox.FormattingEnabled = true;
        this.host_listbox.Location = new System.Drawing.Point(33, 36);
        this.host_listbox.Name = "host_listbox";
        this.host_listbox.Size = new System.Drawing.Size(179, 169);
        this.host_listbox.TabIndex = 0;

编辑:

方法不应该是静态的!试着这样修改你的方法,看看会发生什么。

  public void fill_checkboxlist()
  {
        host_listbox.Items.Clear();
        host_listbox.BeginUpdate();
        host_listbox.Items.Add("A", false);
        host_listbox.Items.Add("B", false);
        host_listbox.Items.Add("C", false);
        host_listbox.EndUpdate();
  }

如果你认为它需要是静态的,你必须这样做:

    private void Form1_Load(object sender, EventArgs e)
    {
        fill_checkboxlist(host_listbox);
    }
    public static void fill_checkboxlist(CheckedListBox chlb)
    {
        chlb.Items.Clear();
        chlb.BeginUpdate();
        chlb.Items.Add("A", false);
        chlb.Items.Add("B", false);
        chlb.Items.Add("C", false);
        chlb.EndUpdate();
    }

我也不明白,为什么你的方法标记为公共....