2017-02-20 3 views
1

J'utilise la classe PanelSet pour créer un écran de réglage en deux panneaux:Comment remplacer un panelset en utilisant replaceChild dans BrightScript

  • panelA sur le côté gauche affiche une liste des paramètres généraux des options
  • panelB est affiché sur la droite, comprend une liste d'options différentes pour chaque élément panelA

Comment puis-je remplacer le Panel affiché o n du côté droit, lorsque l'utilisateur change l'élément ciblé sur panelA? Indique que vous devez utiliser la méthode replaceChild, mais je n'arrive pas à comprendre comment cela est supposé fonctionner, ni d'autres exemples. Voilà ce que je cherchais, mais ça ne marche pas:

function showPanelInfo() 
    if m.panelA.list.itemFocused = 0 
     m.panelset.replaceChild(m.panelB, 3) 
    else 
     m.panelset.replaceChild(m.panelC, 3) 
    end if 
end function 

Function init() 
    m.panelset = createObject("roSGNode", "PanelSet") 

    ' Left-hand side panel with two items list 
    m.panelA = m.panelset.createChild("OptionsListPanel") 

    ' Right-hand side panels with different lists for each item on left-hand side panel 
    m.panelB = m.panelset.createChild("OptionsBPanel") 
    m.panelC = createObject("roSGNode", "OptionsCPanel") 

    m.panelA.list.observeField("itemFocused", "showPanelInfo") 
... 
end function 

Répondre

2

Si vous utilisez GridPanel ou ListPanel, vous devez respecter son champ createNextPanelIndex et simplement définir son nouveau panneau à nextPanel champ dans l'observateur. Donc, d'habitude vous ne devriez jamais insérer/remplacer/créer manuellement des enfants de PanelSet. Vérifiez comment cela fonctionne here et here. Si vous utilisez un noeud Panel simple, cela peut être un peu plus compliqué, mais je crois que ce n'est pas le cas.

Exemple de code:

Function showPanelInfo() 
    if m.panelA.list.itemFocused = 0 
    m.panelset.nextPanel = m.panelB 
    else 
    m.panelset.nextPanel = m.panelC 
    end if 
end function 

Function init() 
    m.panelset = createObject("roSGNode", "PanelSet") 

    ' Left-hand side panel with two items list 
    m.panelA = m.panelset.createChild("OptionsListPanel") 

    ' Right-hand side panels with different lists for each item on left-hand side panel 
    m.panelB = m.panelset.createChild("OptionsBPanel") 
    m.panelC = createObject("roSGNode", "OptionsCPanel") 

    m.panelA.observeField("createNextPanelIndex", "showPanelInfo") 
    ... 
end function