LuaInterfacefor.NETを使用してWindowsフォームオブジェクトを作成しています。これは、1つのことを除いて、かなりうまく機能します。
Anchor
のプロパティを使用して、自動的にサイズを変更したいと思いControl
ます。アンカーの1つだけを設定した場合(たとえば、のみAnchorStyles.Top
)、それは機能しますが、これは実際には意味がありません。複数のアンカーを設定する必要があります。これは、「ビット単位または」と組み合わせて(または数値で追加するだけで)実行されます。
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:.NET CLRをLuaでスクリプト化する)。
値を数値として割り当てることもできません。
myLabel.Anchor = 15 -- 15 = 8 + 4 + 2 + 1 = Top+Left+Right+Bottom
今回は、エラーメッセージはかなり不特定です。
LuaInterface.LuaException: function
どうすればこれを回避できますか?
Luaで番号を正しい列挙型に型キャストする可能性はありますか?