Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122

Создать элемент в CheckedListBox по данным

12.07.2016, 15:50. Показов 5783. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! Такая проблема.
Есть xml-файл, в нем 4 пары параметров.
Нужно чтобы при извлечении каждой пары параметров (имя, запрос) создавался элемент и действие при установке флажка на него

Подскажите, как все это сделать?????

Вот то что наработал, вообще ничего в голову не лезет

C#
1
2
3
4
5
6
7
8
9
10
11
12
    XmlDocument doc = new XmlDocument();
            doc.Load(source);
            XmlNodeList elem = doc.GetElementsByTagName("Request");
            XmlNodeList el_name = doc.GetElementsByTagName("Filters Name");
            for (int i =0; i < el_name.Count; i++)
            {
                    CheckedListBox box = new CheckedListBox();
                    box.Name = el_name[i].InnerXml;
                    box.Text = el_name[i].InnerXml;
                    box.ItemCheck += new ItemCheckEventHandler(CheckedListBox1ItemCheck);
                    checkedListBox1.Items.Add(box);
            }
Добавлено через 22 минуты
как указать XmlWriter чтобы он дописывал в файл, а не перезаписывал его??
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.07.2016, 15:50
Ответы с готовыми решениями:

Программно выделить элемент в CheckedListBox
Не как не пойму как можно программно выделить в CheckedListBox только флешку, у меня почему то выделяется еще и dvd , возможно ли это...

Выделенный элемент в CheckedListBox WinForm
Уважаемые форумчане - знатоки. Возникла такая ситуации: есть CheckedListBox, в нем выделяю мышкой один элемент(строку) - это рисунок,...

Всплывающее описание при наведении на элемент CheckedListBox
есть checkedListBox с коллекцией Items Задача при наведении мыши на элемент коллекции (не выделяя его) вывести окно с описанием данного...

43
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 11:13  [ТС]
Студворк — интернет-сервис помощи студентам
sysadkrd,
Прошу прощения, вот такой формат

XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter>
    <Name>WHERE='T'</Name>
    <Request>SELECT * FROM alarms WHERE='T';</Request>
  </Filter>
</Filters>
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 11:31
C#
1
2
3
4
5
6
7
8
9
10
11
12
            
            XmlDocument doc = new XmlDocument();
            doc.Load("filename");
            foreach (XmlNode v in doc.GetElementsByTagName("Filter"))
            {
                checkedListBox1.Items.Add(new Check
                {
                    Name = v.ChildNodes[0].InnerText,
                    Param = v.ChildNodes[1].InnerText
                });
 
            }
1
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 11:48  [ТС]
sysadkrd,

Еще один вопрос. Здорово выручили. Я устанавливаю свойство CheckOnClick = true;
Но все равно приходится 2 раза нажимать на элемент чтобы сработало свойство. Почему так?
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 11:54
попробуйте
Form1.DoubleBuffered = True;

но по идее CheckOneClick = True как раз за это и отвечает (у меня все корректно нажимается с 1 раза )
попробуйте добавить еще элементов в чеклистбокс
и после заполнения
C#
1
checkedListBox1.Focus();
0
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 12:46  [ТС]
sysadkrd, к сожалению, все равно срабатывает не по установке флажка((((

Вот мое тело-константа запроса: SELECT * FROM alarms
А вот такой еще момент: если отмечено несколько флажков, то нужно поля со значениями Request добавлять в строку запроса

Что то типа такого должно быть:

SELECT * FROM alarms WHERE Cleared='T' AND even='Com'; // ну и так далее

Как лучше сделать?

Добавлено через 20 минут
sysadkrd,

вот что пытаюсь. Надо чтобы при установке очередного флага, Request этого объекта добавлялось к переменной GLOBAL_REQUEST, а если флаг был снят, то его условие убрано.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void CheckedListBox1ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (e.Index < 0) return;
            if (e.NewValue == CheckState.Checked)
            {
                Check check = checkedListBox1.Items[e.Index] as Check;
                if (check != null)
                {
                  ConnectPostgrec(GLOBAL_REQUEST + check.Param, Connector);
                }
            }
            if (e.NewValue == CheckState.Unchecked)
            {
                
            }
        }
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 13:00
C#
1
2
3
4
5
6
7
8
9
10
 public List<string> GLOBAL_REQUEST = new List<string>();
 
// добавление
GLOBAL_REQUEST.Add(string);
 
// при снятии флажка, удаление
GLOBAL_REQUEST.Remove(string); // указать часть 
 
// получить готовый запрос
string.Join(" ", GLOBAL_REQUEST);
0
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 13:13  [ТС]
sysadkrd, из коллекции потом строку удобно будет построить?)

Добавлено через 8 минут
sysadkrd, типа вот так? Я уже закипел на работе, могу чего то не заметить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void CheckedListBox1ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (e.Index < 0) return;
            if (e.NewValue == CheckState.Checked)
            {
                Check check = checkedListBox1.Items[e.Index] as Check;
                if (check != null)
                {
                   FILTERS_REQUEST.Add(" AND " + check.Param);
                   ConnectPostgrec("запрос", Connector); // здесь нужно передать пересобранную строку запроса
                }
            }
            if (e.NewValue == CheckState.Unchecked)
            {
                Check c = checkedListBox1.Items[e.Index] as Check;
                if (c != null)
                {
                     FILTERS_REQUEST.Remove(" AND " + c.Param);
                                     ConnectPostgrec("запрос", Connector);
                    }
            }
            string.Join(" ", FILTERS_REQUEST);
        }
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 13:36
Цитата Сообщение от USTeam Посмотреть сообщение
из коллекции потом строку удобно будет построить?)
C#
1
2
// получить готовый запрос
string.Join(" ", GLOBAL_REQUEST); // Это склейка коллекции в 1 строку с разделителем " "
0
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 13:44  [ТС]
sysadkrd,

сделал вот так, вообще больше ничего не запрашивается) я сейчас с ума сойду))

при загрузке формы
C#
1
FILTERS_REQUEST.Add("SELECT * FROM alarms WHERE ");
основной код. Что не так?????

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void CheckedListBox1ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (e.Index < 0) return;
            if (e.NewValue == CheckState.Checked)
            {
                Check check = checkedListBox1.Items[e.Index] as Check;
                if (check != null)
                {
                   FILTERS_REQUEST.Add(" AND " + check.Param);
                   string.Join(" ", FILTERS_REQUEST);
                   ConnectPostgrec(string.Join(" ", FILTERS_REQUEST), Connector);
                }
            }
            if (e.NewValue == CheckState.Unchecked)
            {
                Check c = checkedListBox1.Items[e.Index] as Check;
                if (c != null)
                {
                    FILTERS_REQUEST.Remove(" AND " + c.Param);
                    ConnectPostgrec(string.Join(" ", FILTERS_REQUEST), Connector);
                }
            }
        }
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 13:57
C#
1
2
3
4
5
6
7
8
9
public void CheckedListBox1ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (e.Index < 0) return;
            Check check = checkedListBox1.Items[e.Index] as Check;
            if(check==null) return;
            if (e.NewValue == CheckState.Checked) FILTERS_REQUEST.Add(" AND " + check.Param);
            else FILTERS_REQUEST.Remove(" AND " + c.Param);
            ConnectPostgrec(string.Join(" ", FILTERS_REQUEST), Connector);        // тут поставьте точку останова
        }
как достигнет остановки выделите "string.Join(" ", FILTERS_REQUEST)" -> ПКМ -> Быстрая проверка
какой результат?
0
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 14:15  [ТС]
sysadkrd,

я продебажил, вообщем нужно проверку добавить что если это второй элемент типа FILTERS_REQUEST[2], тогда туда записать не " AND " + , а просто сам параметр, т.е просто check.Param
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 14:32
ну значит решилось, подравляю
0
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 14:54  [ТС]
sysadkrd, Как проверить является ли элемент вторым в списке?
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 15:04
C#
1
2
3
4
  if(FILTERS_REQUEST.IndexOf(string) == 2)
  {
    // ...
  }
0
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 15:28  [ТС]
sysadkrd, я короче сделал, первый checkbox проходит нормально, как только я его добавлю, а вот второй уже просто следом идет, такая строка

SELECT * FROM alarms WHERE Cleared='T'; между ними должен быть AND но он не добавляется eventype="bla bla bla";
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 15:31
C#
1
if (e.NewValue == CheckState.Checked)
поменяйте на
C#
1
if (checkedListBox1.GetItemChecked(e.Index))
должно помочь
0
1 / 1 / 2
Регистрация: 06.12.2015
Сообщений: 122
13.07.2016, 22:09  [ТС]
sysadkrd, не подскажешь еще один момент, почему постоянно перезаписывается xml-файл, а не добавляет к уже имеющимся данные?

Вот таким кодом создаю необходимый мне блок данных. Перерыл интернет, не нашел какой флаг отвечает за дописывание..

C#
1
2
3
4
5
6
7
8
9
10
11
XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                settings.NewLineOnAttributes = true;
                XmlWriter writer = XmlWriter.Create(source, settings);
                writer.WriteStartElement("Filters");
                writer.WriteStartElement("Filter");
                writer.WriteElementString("Name", richTextBox1.Text);
                writer.WriteElementString("Request", richTextBox2.Text);
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.Close();
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
13.07.2016, 22:57
xml только перезаписывается, стандартными ср-ми никак не получится (есть парочка извращенных способов, но это муторно для понимания)
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
14.07.2016, 08:21
да зачем данные НЕ перезаписывать?

допустим у вас три фильтра, вы запускаете прогу, считываете их, работаете, добавляете четвёртый, сохраняете выходите. Если дописывать, то у вас в файле станет уже семь фильтров. а если первые три не изменять, то они ещё будут и повторяться. В результате файл захламлён.
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
14.07.2016, 09:15
Цитата Сообщение от USTeam Посмотреть сообщение
не подскажешь еще один момент, почему постоянно перезаписывается xml-файл, а не добавляет к уже имеющимся данные?
Если уж так надо, то можно так (но это извращение, с кучей проблем в последующем):
C#
1
2
3
4
5
6
 var k = File.ReadAllLines(filename).ToList();
       k.RemoveAt(k.Count-1);
       k.Add(" <Filter>\r\n  <Name>" +richTextBox1.Text+
                "</Name>\r\n  <Request>" +richTextBox2.Text+
                "</Request>\r\n </Filter>\r\n</Filters>");
File.WriteAllLines(filename,k);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2016, 09:15

CheckedListBox, позволить выбирать только один элемент
Visual Studio 2012 Компонент: checkedListBox У него есть свойство: &quot;SelectionMode&quot;. У него есть вариант &quot;One&quot;, но даже так...

Как можно создать несколько столбцов в checkedListBox?
Как можно создать сделать несколько столбцов в checkedListBox??? Если этого сделать тельзя то какой компонет использовать для этого?

Вставить перед данным элементом списка новый элемент со значением D и вывести "указатель" на добавленный элемент списка
Дано число D и &quot;указатель&quot; PO на один из элементов непустого двусвязного списка. Вставить перед данным элементом списка новый элемент со...

Как в векторе вставить элемент перед данным
Например есть вектор из 5 элементов :1,2,3,4,5 мне нужно вставить например число 6 перед 5 эллементом, чтобы было 1,2,3,4,6,5

Проверить, существует ли элемент QVector с данным индексом
Есть QVector&lt;Point&gt; inter; Я добавляю в него элементы inter = a и inter = b. Но перед добавлением нужно проверить, не добавлен ли уже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru