如何检测右键单击 DCollapsibleCategory? [GLua]
How to detect right-click on DCollapsibleCategory? [GLua]
我相信 Garry 的 Mod 的 DCollapsibleCategory
派生自 Panel
所以我尝试创建一个自定义 vgui 元素以便我可以添加 function PANEL:OnMousePressed(keyCode)
但是这完全改变了它在我记分牌上的表现。
这是自定义 vgui 元素的代码,也许我遗漏了什么:
local PANEL = {}
AccessorFunc(PANEL, "hiddenPanel", "HiddenPanel")
function PANEL:Init()
self.dataPanel = vgui.Create("DCollapsibleCategory", self)
self.dataPanel:SetExpanded(0)
self.dataPanel:SetLabel('')
self.dataPanel:GetChildren()[1]:SetTall(45)
self.dataPanel.Paint = function(pnl, w, h)
draw.RoundedBox(0, 0, 0, w, h, Advocate_Scoreboard.Colors.BASE_HEADER)
end
self.hiddenList = vgui.Create("DPanelList", self.dataPanel)
self.hiddenList:SetSpacing(1)
self.dataPanel:SetContents(self.hiddenList)
self.hiddenPanel = vgui.Create("DPanel", self.hiddenList)
self.hiddenList:AddItem(self.hiddenPanel)
self.hiddenPanel.Paint = function(pnl, w, h)
draw.RoundedBox(0, 0, 0, w, h, Color(50, 50, 50))
end
end
function PANEL:PerformLayout()
self.dataPanel:SetSize(self:GetWide(), self:GetTall())
self.dataPanel:GetChildren()[1]:SetTall(45)
self.hiddenList:SetSize(self.dataPanel:GetWide(), self.dataPanel:GetTall())
self.hiddenPanel:SetSize(self.hiddenList:GetWide(), 39)
end
function PANEL:OnMousePressed(keyCode)
print(keyCode)
end
vgui.Register("Advocate_Scoreboard.Row", PANEL)
DCollapsibleCategory
不响应任何 .DoClick
函数 - 我不相信它有任何派生自 Panel 的方法。
DCollapsibleCategory 由 header 行和内容组成。
header does not implement OnMousePressed.
内容由您添加到其中的任何 UI 个元素组成。
如果您希望内容响应鼠标事件,您应该覆盖那些单独元素的 OnMousePressed。
如果您确实需要 header 行中的此类功能,您可以向 Garry 的 Mod 存储库提交拉取请求。
或者:
- 复制the code for the DCollapsibleCategory
- 将 DCategoryHeader 重命名为 DCategoryHeader2
- 将 DCollapsibleCategory 重命名为 DCollapsibleCategory2
- 在header
PANEL
table 中添加如下函数
local PANEL = {
...
OnMousePressed = function(self, mcode)
self.DoClick(self)
self:GetParent():OnMousePressed(mcode)
end,
...
}
derma.DefineControl( "DCategoryHeader2", "Category Header", PANEL, "DButton" )
现在您可以检测鼠标在 header
上的点击
local DCollapsible = vgui.Create( "DCollapsibleCategory2", frame )
DCollapsible:SetLabel( "Collapsible Category" )
DCollapsible:SetPos( 25, 50 )
DCollapsible:SetSize( 250, 100 )
DCollapsible:SetExpanded( false )
function DCollapsible:OnMousePressed(keyCode)
chat.AddText("DCollapsible Key pressed- " .. tostring(keyCode))
end
我相信 Garry 的 Mod 的 DCollapsibleCategory
派生自 Panel
所以我尝试创建一个自定义 vgui 元素以便我可以添加 function PANEL:OnMousePressed(keyCode)
但是这完全改变了它在我记分牌上的表现。
这是自定义 vgui 元素的代码,也许我遗漏了什么:
local PANEL = {}
AccessorFunc(PANEL, "hiddenPanel", "HiddenPanel")
function PANEL:Init()
self.dataPanel = vgui.Create("DCollapsibleCategory", self)
self.dataPanel:SetExpanded(0)
self.dataPanel:SetLabel('')
self.dataPanel:GetChildren()[1]:SetTall(45)
self.dataPanel.Paint = function(pnl, w, h)
draw.RoundedBox(0, 0, 0, w, h, Advocate_Scoreboard.Colors.BASE_HEADER)
end
self.hiddenList = vgui.Create("DPanelList", self.dataPanel)
self.hiddenList:SetSpacing(1)
self.dataPanel:SetContents(self.hiddenList)
self.hiddenPanel = vgui.Create("DPanel", self.hiddenList)
self.hiddenList:AddItem(self.hiddenPanel)
self.hiddenPanel.Paint = function(pnl, w, h)
draw.RoundedBox(0, 0, 0, w, h, Color(50, 50, 50))
end
end
function PANEL:PerformLayout()
self.dataPanel:SetSize(self:GetWide(), self:GetTall())
self.dataPanel:GetChildren()[1]:SetTall(45)
self.hiddenList:SetSize(self.dataPanel:GetWide(), self.dataPanel:GetTall())
self.hiddenPanel:SetSize(self.hiddenList:GetWide(), 39)
end
function PANEL:OnMousePressed(keyCode)
print(keyCode)
end
vgui.Register("Advocate_Scoreboard.Row", PANEL)
DCollapsibleCategory
不响应任何 .DoClick
函数 - 我不相信它有任何派生自 Panel 的方法。
DCollapsibleCategory 由 header 行和内容组成。
header does not implement OnMousePressed.
内容由您添加到其中的任何 UI 个元素组成。
如果您希望内容响应鼠标事件,您应该覆盖那些单独元素的 OnMousePressed。
如果您确实需要 header 行中的此类功能,您可以向 Garry 的 Mod 存储库提交拉取请求。
或者:
- 复制the code for the DCollapsibleCategory
- 将 DCategoryHeader 重命名为 DCategoryHeader2
- 将 DCollapsibleCategory 重命名为 DCollapsibleCategory2
- 在header
PANEL
table 中添加如下函数
local PANEL = {
...
OnMousePressed = function(self, mcode)
self.DoClick(self)
self:GetParent():OnMousePressed(mcode)
end,
...
}
derma.DefineControl( "DCategoryHeader2", "Category Header", PANEL, "DButton" )
现在您可以检测鼠标在 header
上的点击local DCollapsible = vgui.Create( "DCollapsibleCategory2", frame )
DCollapsible:SetLabel( "Collapsible Category" )
DCollapsible:SetPos( 25, 50 )
DCollapsible:SetSize( 250, 100 )
DCollapsible:SetExpanded( false )
function DCollapsible:OnMousePressed(keyCode)
chat.AddText("DCollapsible Key pressed- " .. tostring(keyCode))
end