2012-02-16 14 views
2

私は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の正しい列挙型に型キャストする可能性はありますか

+0

@phoog:問題が行う方法はないとしてそれは、重複はありません計算結果を(ビット単位で計算した場合と加算した場合のどちらでも)正しい列挙型に変換します。私はちょうどここに追加を使用しました。なぜなら、それはLuaに直接組み込まれていてビット単位であるか、そうではないからです。 VB/C#では 'または'/'|'も使用します。 –

+0

ご迷惑をおかけして申し訳ありません – phoog

答えて

0

これを行う方法がわかりました。私はSystem.EnumToObjectメソッドを使用しました。変換する列挙型と、使用する整数値をとります。

次は私のヘルパーライブラリからコードスニペットです:

local EnumToObject, WinFormsAnchorStylesType = 
       luanet.get_method_bysig(luanet.System.Enum, "ToObject", 
              "System.Type", "System.Int32"), 
       luanet.System.Windows.Forms.AnchorStyles.Top:GetType() 

AnchorTop, AnchorLeft, AnchorRight, AnchorBottom = 1, 4, 8, 2 

function Anchor(flags) 
    return EnumToObject(WinFormsAnchorStylesType, flags) 
end 

あなたはこのようにそれを使用します。

Label1 = luanet.System.Windows.Forms.Label() 
Label1.Anchor = Anchor(AnchorLeft + AnchorTop + AnchorRight + AnchorBottom) 
関連する問題