【发布时间】:2012-06-12 05:52:06
【问题描述】:
我有一个问题,我无法解决。 我正在编写一个有助于轻松更改系统代理的应用程序。它有一个包含一些项目的 listView。这些项目有复选框。 应用程序的逻辑要求一次只能检查一项,所以我有以下代码来确保它运行良好:
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
listView1.ItemChecked -= listView1_ItemChecked;
foreach(ListViewItem item in listView1.Items)
{
if(item != e.Item)
{
item.Checked = false;
}
}
listView1.ItemChecked += listView1_ItemChecked;
}
我的应用程序还需要在启动时检查注册表中的某些值,并将其文本与我在 listView 中的项目进行比较。 我就是这样做的:
private void GetProxyFromRegistry()
{
RegistryKey SystemProxy = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings");
try
{
string UsedProxy = SystemProxy.GetValue("ProxyServer").ToString();
foreach (ListViewItem item in listView1.Items)
{
if (UsedProxy == item.Text + ":" + item.SubItems[1].Text)
{
item.Checked = true;
}
else
{
item.Checked = false;
}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
问题在于,除了 last 一个使用时,不会检查任何 listView1.Items。 我知道这是因为 listView1_ItemChecked(),但我不知道如何以其他方式解决它。 你能帮我找到一个解决方案,如何取消选中所有其他复选框,或者找到一种解决方法来检查正确的项目吗?
【问题讨论】:
-
这没有多大意义。您已经知道如何取消订阅 ItemChecked 事件,这样它也可以在 GetProxyFromRegistry 中工作。但首先要创建一个更直观的用户界面。
-
用户界面再直观不过了。我不知道如何在特定时刻(方法)取消订阅此事件。可以给我举个例子吗?
-
在您自己的代码中!您的 ItemChecked 事件处理程序的第一行。
标签: c# winforms checkbox registry