在复选框中看不到新添加的项目
本文关键字:添加 项目 复选框 看不到 新添加 | 更新日期: 2023-09-27 18:13:41
我正在编写一个c#程序,其中有一个checkkedlistbox host_listbox
.
在我的代码中,我有一个向checkedlistbox
添加新项目的选项。当我完成添加新项目时,我无法在我的checkedlistbox
中看到新添加的项目,直到程序关闭并再次运行。
我试过了
Refresh()
BeginUpdate()
EndUpdate()
但他们不工作。
添加新项完成后,在checkedlistbox
的ITEMS
中显示新添加的项,但没有显示。
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();
}
我也不明白,为什么你的方法标记为公共....