C #.Флажки становятся непроверенными - PullRequest
0 голосов
/ 21 марта 2012

У меня есть проблема, которую я не могу решить.Я пишу приложение, которое поможет легко изменить системный прокси.У него есть 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);
        }
    }

Проблема в том, что ни один из listView1.Items не будет проверен, за исключением last один при использовании.Я знаю, что это из-за listView1_ItemChecked (), но я не знаю, как решить ее другим способом.Можете ли вы помочь мне найти решение, как снять все остальные флажки или найти обходной путь для проверки правильности элемента?

Ответы [ 2 ]

1 голос
/ 12 июня 2012

это может быть немного простым решением, когда одновременно используется только один флажок, но он работает для меня. создайте событие listview.click, а затем выполните следующие действия:

    private void listView_Click(object sender, System.EventArgs e)
    {
        foreach (ListViewItem item in listView.Items)
        {
            item.Checked = false;
        }

    }

На самом деле немного хак, но прекрасно работает.

0 голосов
/ 21 марта 2012

Итак, начиная с события ItemCheck, оно должно выглядеть следующим образом:

void listView1_ItemCheck(object sender, ItemCheckEventArgs e)
{
        if (e.currentValue == CheckState.Checked)
            return;
        foreach (ListViewItem item in listView1.Items)
        {
            if (item.Index != e.Index)
            {
                item.Checked = false;
            }
        }
}

Для следующего выпуска я бы предложил установить точку останова в этой строке кода:

   if (UsedProxy == item.Text + ":" + item.SubItems[1].Text)

Когда достигается точка останова (по последнему индексу), проверьте, что отличается от этого элемента по сравнению с другими (например, посмотрите на чувствительность к регистру).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...