首页 > 解决方案 > 添加多个按钮和可见属性时的用户控件问题

问题描述

这是 Maxsript 中 dotNet 中可见性中断的一个已知问题。这是一个线程,展示了如何将按钮添加到 aUserControl以使其正常工作。

我的问题是我想添加多个按钮,UserControl一旦我知道要取消隐藏哪个不在此版本中,我想将按钮移动到位,但这是我需要此功能的意图。

第二个按钮没有显示,即使它的位置对于听众来说是正确的。

我希望我不必UserControl为每个按钮添加单独的!

如何向控件添加多个按钮并让它们更新其位置和可见性?

clearListener()
try destroyDialog RollsRoyce catch()

rollout RollsRoyce "" width:400 height:60
(

  local btnH = 33
  local btnW = RollsRoyce.width/2

  dotnetcontrol panelVisibleFix "UserControl" width:RollsRoyce.width height:btnH pos:[0,15]
  dotNetControl btn1 "button" text:"Button 1..." visible:false width:btnW height:btnH
  dotNetControl btn2 "button" text:"Button 2..." visible:false width:btnW height:btnH

  on RollsRoyce open do
  (

    btn1.FlatStyle = btn1.FlatStyle.System
    btn2.FlatStyle = btn2.FlatStyle.System

    panelVisibleFix.controls.addrange #(btn1, btn2)

    -- Add the button to the panel and unhide it.
    -- In my main script I want to check for conditions to have these visible or
    -- not but with this simple example I want to unhide then.
    btn1.visible = true
    RollsRoyce.btn1.pos = panelVisibleFix.pos

    -- This button is not getting shown.
    btn2.visible = true
    RollsRoyce.btn2.pos = RollsRoyce.panelVisibleFix.pos+[RollsRoyce.btnW,0]


    format "btn1 position is: %\n" RollsRoyce.btn1.pos
    format "btn2 position is: %\n" RollsRoyce.btn2.pos

    )
  )

createdialog RollsRoyce

标签: maxscript

解决方案


您正在使用转出控件,就好像它们是常规的 .NET 控件一样,并且您在转出的上下文中设置它们的位置,就好像您在 .NET 控件中设置它一样。要么做一件事,要么做另一件事。使用转出控件中的 .NET 控件,它可能看起来像这样:

try destroyDialog RollsRoyce catch()
rollout RollsRoyce "" width:400 height:60
(
    local btnH = 33 
    dotNetControl panelVisibleFix "FlowLayoutPanel" width:RollsRoyce.width height:btnH pos:[0,15] 

    fn makeNETBtn width height text visible:on =
    (
        local btn = dotNetObject "Button"
            btn.Text = text
            btn.Width = width
            btn.Margin = dotNetObject "Padding" 0 0 0 0
            btn.Height = height
            btn.FlatStyle = btn.FlatStyle.System
            btn.Visible = visible
        return btn
    )

    on RollsRoyce open do
    (
        local btnW = RollsRoyce.width / 2

        local btn1 = makeNETBtn btnW btnH "Button 1..." visible:off
        local btn2 = makeNETBtn btnW btnH "Button 2..." visible:off

        panelVisibleFix.Controls.AddRange #(btn1, btn2) 

        btn1.visible = on
        btn2.visible = on
    )
) 
createDialog RollsRoyce

推荐阅读