группа переключателей Matlab

у меня есть два набора групп кнопок. первая группа кнопок имеет две радиокнопки, а вторая группа имеет четыре радиокнопки. если кнопка 1 выбрана в группе 1 и любая из группы 2. Аналогично для кнопки 2 в группе 1 и любой из группы 2 вызовы соответствующих функций должны выполняться по нажатию кнопки с этими комбинациями. как это сделать. будет 8 отдельных вызовов функций для соответствующих комбинаций. как сделать комбинацию групп кнопок. switch case или if else оператор не сработал?? Пожалуйста, помогите.


person vijisai    schedule 09.05.2010    source источник


Ответы (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)
person yuk    schedule 09.05.2010

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
person Nzbuu    schedule 10.05.2010

Не самый лучший стиль, но если все они используют одни и те же аргументы, тогда вам может сойти с рук динамическое построение вызова с помощью функции 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')) и с учетом того, что есть что)

person AlwaysWrong    schedule 17.03.2011