Вверх ↑
Этот топик читают: Гость
Ответов: 817
Рейтинг: 52
#1: 2015-07-08 21:44:45 ЛС | профиль | цитата
Добрый день!
У MST_CheckBoxes есть точка AllCheck, по этой точке я проверяю есть ли установленные флаги или нет.
Если флаги не установлены, то выдает пусто (я даже не знаю строка это или нет, наверное правильно назвать NULL)
Если делать проверку как делаю я, то условие будет выполнено в двух случаях
1. если флаги не стоят
2. и флаг установлен на первой строке (индекс 0)
code_35981.txt
Думаю это не правильно.
Исходя из этого прошу помощи в решении вопроса.
Либо кто то предложит другой вариант проверки, либо внести изменения в компонент, что бы он выдавал, например -1 если флаги не установлены.
карма: 1

0
файлы: 1code_35981.txt [244B] [418]
Ответов: 2265
Рейтинг: 676
#2: 2015-07-08 23:21:13 ЛС | профиль | цитата
-= DriveR =-, как по мне так это не проблема MST_CheckBoxes, а проблема в том что нет возможности отличить Null от 0.
Как вариант: code_35982.txt

карма: 11

1
файлы: 1code_35982.txt [1.8KB] [640]
Голосовали:Tad
Разработчик
Ответов: 26149
Рейтинг: 2127
#3: 2015-07-08 23:36:18 ЛС | профиль | цитата
На точке AllCheck MT-поток, вообще-то, содержащий индексы УСТАНОВЛЕННЫХ флажков. Неустановленных там нет. А Null говорит о том, что там ничего не установлено вообще
карма: 22

0
Ответов: 2265
Рейтинг: 676
#4: 2015-07-09 02:40:33 ЛС | профиль | цитата
nesco, как я понял, -= DriveR =- это понял. Вопрос в другом:
Как отличить первый выбранный флажек (MT-поток будет содержать [0]), от ничего не выбранного Null :?
-= DriveR =- нужно знать есть хоть один установленный флажек или нет.
карма: 11

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#5: 2015-07-09 03:34:34 ЛС | профиль | цитата
sla8a писал(а):
нужно знать есть хоть один установленный флажек или нет.

А че, Case у нас не работает
карма: 22

0
Ответов: 186
Рейтинг: 9
#6: 2015-07-09 07:55:55 ЛС | профиль | цитата
sla8a писал(а):
-= DriveR =-, как по мне так это не проблема MST_CheckBoxes, а проблема в том что нет возможности отличить Null от 0.

sla8a, тот же If_else прекрасно справился со сравнением, зачем было считать знаки.

code_35984.txt

карма: 0

0
файлы: 1code_35984.txt [1.8KB] [549]
Ответов: 817
Рейтинг: 52
#7: 2015-07-09 09:24:05 ЛС | профиль | цитата
sla8a писал(а):
nesco, как я понял, -= DriveR =- это понял. Вопрос в другом:
Как отличить первый выбранный флажек (MT-поток будет содержать [0]), от ничего не выбранного Null :?
-= DriveR =- нужно знать есть хоть один установленный флажек или нет.

Все верно, я все понял.
Вот реальная схема над которой я бьюсь
code_35986.txt
Я попробовал применить все ваши предложения и ничего дельного не добился
nesco писал(а):
А че, Case у нас не работает

Подскажите как его применить? Я не вижу большой разницы между If_else и Case

Теперь по моей реальной схеме, проведите эксперименты:
1. Ничего не выбирайте и нажмите кнопку "Удалить" - появляется предупреждение (так и должно быть, это хорошо)
2. Выберите, например строку 2 и удалите ее - все получается без предупреждения (так и должно быть, это хорошо)
3. Выберите несколько строк и обязательно строку 1 - появляется предупреждение (так не должно быть, это плохо)

------------ Дoбавленo в 09.24:
Лично мое мнение:
Мне кажется, что лучше бы выдавалось -1 если не выбран не один флаг
Не помню название компонентов, но в каких то сделано подобное.
карма: 1

0
файлы: 1code_35986.txt [1.4KB] [588]
Разработчик
Ответов: 26149
Рейтинг: 2127
#8: 2015-07-09 09:58:48 ЛС | профиль | цитата
Решение твоего вопроса

Add(MainForm,3063237,322,287)
{
Width=409
Height=286
Position=1
link(onCreate,1976442:doEnum,[])
}
Add(MTStrTbl,15043066,245,273)
{
Width=390
Height=210
Name="MTStrTbl"
Columns=#3:Имя|7:Фамилия|8:Отчество|
CheckBoxes=0
}
Add(StrList,4383086,364,231)
{
Strings=#20:Иван;Иванов;Иванович|24:Андрей;Андреев;Андреевич|21:Гадя;Хренова;Петрович|
}
Add(ArrayEnum,1976442,378,301)
{
link(onItem,16356153:doMT,[])
link(Array,4383086:Array,[])
}
Add(MST_RowAction,15395190,476,294)
{
MSTControl="MTStrTbl"
}
Add(MT_String,16356153,427,294)
{
link(onResult,15395190:doRowAction,[])
}
Add(MST_CheckBoxes,9099572,378,378)
{
MSTControl="MTStrTbl"
}
Add(DoData,12212666,490,462)
{
link(onEventData,2680349:doRowAction,[])
link(Data,5834739:Item,[(496,450)(477,450)(477,506)(391,506)])
}
Add(MST_RowAction,2680349,539,462)
{
Action=3
MSTControl="MTStrTbl"
}
Add(MT_Enum,5834739,385,462)
{
Type=1
link(onItem,12212666:doData,[])
link(MT,9099572:AllCheck,[])
}
Add(Button,7465548,161,462)
{
Left=5
Top=220
Width=85
Caption="Удалить"
link(onClick,2905411:doSum,[])
}
Add(Message,15200509,336,490)
{
Message="Не выбрано что надо удалять"
}
Add(Case,14117503,273,462)
{
Value=Integer(0)
link(onNextCase,5834739:doEnum,[])
link(onTrue,15200509:doMessage,[(326,475)(326,496)])
}
Add(ArraySum,2905411,217,462)
{
ArrayType=1
link(onSum,14117503:doCase,[])
link(Array,9099572:CheckBoxes,[(223,418)(384,418)])
}

карма: 22

2
Голосовали:-= DriveR =-, Konst
Ответов: 817
Рейтинг: 52
#9: 2015-07-09 10:08:31 ЛС | профиль | цитата
nesco, Спасибо
Вот 100 лет не догадался бы, что в таком простом вопросе надо применять ArreySum
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#10: 2015-07-09 10:09:21 ЛС | профиль | цитата
-= DriveR =- писал(а):
я проверяю есть ли установленные флаги или нет.
(выделено мной)
Не слушай сказок про одиночное Case или if_else.
sla8a тебе дал правильный ответ.
Если Len выдал 0 - значит нет установленных чеков.
Т.е. нужна связка из Len + If_else или Len + Case
Add(MTStrTbl,15043066,350,364)
{
Width=390
Height=210
Name="MTStrTbl"
Columns=#3:Имя|7:Фамилия|8:Отчество|
CheckBoxes=0
}
Add(MST_CheckBoxes,9099572,406,364)
{
MSTControl="MTStrTbl"
}
Add(MST_RowAction,2680349,469,427)
{
Action=3
MSTControl="MTStrTbl"
}
Add(MT_Enum,5834739,413,427)
{
Type=1
link(onItem,2680349:doRowAction,[])
link(MT,8312008:Var2,[])
}
Add(Button,7465548,259,427)
{
Left=5
Top=220
Width=85
Caption="Удалить"
link(onClick,15821925:doLength,[])
}
Add(Message,15200509,413,490)
{
Message="Не выбрано что надо удалять"
}
Add(Case,14117503,357,427)
{
Value=Integer(0)
link(onNextCase,5834739:doEnum,[])
link(onTrue,15200509:doMessage,[(401,440)(401,496)])
}
Add(Length,15821925,308,427)
{
link(onLength,14117503:doCase,[])
link(Str,8312008:Var1,[(314,411)])
}
Add(GetDataEx,8312008,413,406)
{
link(Data,9099572:AllCheck,[])
}


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#11: 2015-07-09 10:09:41 ЛС | профиль | цитата
Но можно, кстати, и на if_Else. Но на одном получится только с кнопкой, а если нет кнопки, то надо добавить еще один элемент DoData при Data=Null в поток

Add(MainForm,3063237,322,287)
{
Width=409
Height=286
Position=1
link(onCreate,1976442:doEnum,[])
}
Add(MTStrTbl,15043066,245,273)
{
Width=390
Height=210
Name="MTStrTbl"
Columns=#3:Имя|7:Фамилия|8:Отчество|
CheckBoxes=0
}
Add(StrList,4383086,364,231)
{
Strings=#20:Иван;Иванов;Иванович|24:Андрей;Андреев;Андреевич|21:Гадя;Хренова;Петрович|
}
Add(ArrayEnum,1976442,378,301)
{
link(onItem,16356153:doMT,[])
link(Array,4383086:Array,[])
}
Add(MST_RowAction,15395190,476,294)
{
MSTControl="MTStrTbl"
}
Add(MT_String,16356153,427,294)
{
link(onResult,15395190:doRowAction,[])
}
Add(MST_CheckBoxes,9099572,378,378)
{
MSTControl="MTStrTbl"
}
Add(DoData,12212666,490,462)
{
link(onEventData,2680349:doRowAction,[])
link(Data,5834739:Item,[(496,450)(477,450)(477,506)(391,506)])
}
Add(MST_RowAction,2680349,539,462)
{
Action=3
MSTControl="MTStrTbl"
}
Add(MT_Enum,5834739,385,462)
{
Type=1
link(onItem,12212666:doData,[])
link(MT,6862000:Var2,[])
}
Add(Button,7465548,168,455)
{
Left=5
Top=220
Width=85
Caption="Удалить"
link(onClick,13241272:doCompare,[])
}
Add(Message,15200509,322,378)
{
Message="Не выбрано что надо удалять"
}
Add(If_else,13241272,238,455)
{
link(onTrue,15200509:doMessage,[(277,461)(277,384)])
link(onFalse,5834739:doEnum,[])
link(Op2,6862000:Var1,[(251,439)])
}
Add(GetDataEx,6862000,385,434)
{
link(Data,9099572:AllCheck,[])
}


карма: 22

0
Ответов: 2265
Рейтинг: 676
#12: 2015-07-09 10:12:16 ЛС | профиль | цитата
Chipset, вась не смущает что ваша схема не работает, а выложенная мной выше работает?
dontwork.png
Chipset, вот вам для понимания:
code_35988.txt
nesco писал(а):
А че, Case у нас не работает
Не работает:
code_35990.txt
карма: 11

0
файлы: 3dontwork.png [38KB] [799], code_35988.txt [1.5KB] [627], code_35990.txt [1.3KB] [625]
Ответов: 817
Рейтинг: 52
#13: 2015-07-09 10:14:50 ЛС | профиль | цитата
nesco писал(а):
Но можно, кстати, и на if_Else. Но на одном получится только с кнопкой,...

Ничего не понимаю
Какая разница на какой операнд подавать данные?
Какая разница что с чем сравнивать перанд1 с операнд 2 или операнд2 с операнд1?
От перемены мест слагаемых сумма не меняется, или я не прав?
карма: 1

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#14: 2015-07-09 10:16:03 ЛС | профиль | цитата
-= DriveR =- писал(а):
От перемены мест слагаемых сумма не меняется, или я не прав?

Не прав
Прикол If_else в том, что он тип распознает по первой точке, и Null на первой точке он будет считать целым.

Запомните это, очень пригодится в дальнейшем
карма: 22

0
Ответов: 2265
Рейтинг: 676
#15: 2015-07-09 10:16:20 ЛС | профиль | цитата
-= DriveR =- писал(а):
Ничего не понимаю Какая разница на какой операнд подавать данные?От перемены мест слагаемых сумма не меняется, или я не прав?
Таже фигня, в шоке
nesco, -= DriveR =-, тогда уж лучше так:
code_35991.txt
так как два раза запрашивать AllCheck это два раза перебирать массив.
карма: 11

0
файлы: 1code_35991.txt [1.5KB] [729]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)