2
我正在使用LuaInterface for .NET來創建Windows窗體對象。這個作品除了一件事情相當不錯:從Lua使用基於標誌的.NET枚舉
我想要使用Control
的Anchor
屬性使它們自動調整大小。如果我只設置其中一個錨(例如只有AnchorStyles.Top
),它就可以工作,但這並不合理。我必須設置多個Anchor,這是通過將它們與「按位或者」(或者通過數字添加它們)組合來完成的。
在VB.Net兩部作品:
Dim myLabel As New Label()
myLabel.Anchor = AnchorStyles.Top
myLabel.Anchor = AnchorStyles.Top + AnchorStyles.Left + _
AnchorStyles.Bottom + AnchorStyles.Right
在Lua中,這樣做的工作:
luanet.load_assembly("System.Windows.Forms")
local WinForms = luanet.System.Windows.Forms
local myLabel = WinForms.Label()
myLabel.Anchor = WinForms.AnchorStyles.Top
...但是這額外的行不:
myLabel.Anchor = WinForms.AnchorStyles.Top + WinForms.AnchorStyles.Left +
WinForms.AnchorStyles.Bottom + WinForms.AnchorStyles.Right
它給我以下錯誤:
LuaInterface.LuaException: attempt to perform arithmetic on
field 'Top' (a userdata value)
這在某種意義上是正確的,因爲「LuaInterface將枚舉值視爲相應枚舉類型的字段」(說LuaInterface: Scripting the .NET CLR with Lua)。
它也不可能值分配數字:
myLabel.Anchor = 15 -- 15 = 8 + 4 + 2 + 1 = Top+Left+Right+Bottom
這一次,該錯誤信息是相當非特異性:
LuaInterface.LuaException: function
我怎麼能解決這個問題?
是否有可能在Lua中將數字轉換爲正確的枚舉類型?
@phoog:這不是一個重複的,因爲問題不在於如何做按位運算,但要將結果(如果按位計算或通過加法計算)轉換爲正確的枚舉類型。我只是在這裏使用了添加,因爲它直接嵌入到Lua中,並且按位或不是。在VB/C#中我也使用'或'/'|'。 – 2012-02-16 20:40:25
對不起,我誤解了這個問題 – phoog 2012-02-16 20:48:24