私はWindowsフォームオブジェクトを作成するためにLuaInterface for .NETを使用しています。 1つのことを除いて、これはかなり良い結果です:Luaのフラグベース.NET enumを使用
Anchor
プロパティをControl
にして、自動的にサイズを変更したいと考えています。アンカーのうちの1つだけを設定すると(たとえば、AnchorStyles.Top
のみ)、動作しますが、これは実際には意味がありません。私は複数のアンカーを設定する必要があります。アンカーは、「ビット単位で」または「数値的に追加する」ことで結合されます。 VB.Netで
両方の作品:
luanet.load_assembly("System.Windows.Forms")
local WinForms = luanet.System.Windows.Forms
local myLabel = WinForms.Label()
myLabel.Anchor = WinForms.AnchorStyles.Top
...しかし、この追加の行はしていません::Luaので
Dim myLabel As New Label()
myLabel.Anchor = AnchorStyles.Top
myLabel.Anchor = AnchorStyles.Top + AnchorStyles.Left + _
AnchorStyles.Bottom + AnchorStyles.Right
、これは作業を行い
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#では 'または'/'|'も使用します。 –
ご迷惑をおかけして申し訳ありません – phoog