у меня есть два набора групп кнопок. первая группа кнопок имеет две радиокнопки, а вторая группа имеет четыре радиокнопки. если кнопка 1 выбрана в группе 1 и любая из группы 2. Аналогично для кнопки 2 в группе 1 и любой из группы 2 вызовы соответствующих функций должны выполняться по нажатию кнопки с этими комбинациями. как это сделать. будет 8 отдельных вызовов функций для соответствующих комбинаций. как сделать комбинацию групп кнопок. switch case или if else оператор не сработал?? Пожалуйста, помогите.
группа переключателей Matlab
Ответы (3)
Вот идея.
Сначала вы создаете массив ячеек 2x4 ваших функций.
fnc_array = {fcn11, fcn12, fcn13, fcn14; fcn21, fcn22, fcn23, fcn24};
Затем выполните switch case
для каждого переключателя в группе и верните индекс (скажем, fcn_index1 для 1-й группы и fcn_index2 для 2-й группы), какая кнопка выбрана.
Затем вы можете вызвать функцию из вашего массива с этими индексами:
fcn_array{fcn_index1,fcn_index2}(arguments)
Switch и if..else конечно должны получиться, но их нужно вкладывать друг в друга, т.е. нет возможности включить пару значений.
switch valA
case 1
if isB
out = fcn11(args{:});
else
out = fcn12(args{:});
end
case 2
if isB
out = fcn21(args{:});
else
out = fcn22(args{:});
end
case 3
if isB
out = fcn31(args{:});
else
out = fcn32(args{:});
end
case 4
if isB
out = fcn41(args{:});
else
out = fcn42(args{:});
end
end
Не самый лучший стиль, но если все они используют одни и те же аргументы, тогда вам может сойти с рук динамическое построение вызова с помощью функции eval на основе выбранных кнопок (используя sprintf и поле «SelectedObject» групп переключателей и тег например:eval(sprintf('func%s%s(args)',get(get(handles.group1,'SelectedObject'),'Tag'),get(get(handles.group2,'SelectedObject'),'Tag'))
)
(Можно комбинировать с индексацией дочерних элементов с помощью find(get(handles.group1,'Children')==get(handles.group2,'SelectedObject'))
и с учетом того, что есть что)