View Full Version : Using DotNet.AddEventHandler(): Is it possible to add extra handler to a control?
Jon-Huhn 02-24-2008, 01:58 PM Is it possible to add additional event handlers to a DotNetControl?
To do this, I tried to use dotNet.addEventHandler listviewReference "eventNameAsString" functionToBeCalled, but I got the error "Unable to convert: dotNetControl: listviewReference: System.Windows.Forms.ListView to type: dotNetObject".
I think it's basically saying that I'm trying to add an event to DotNetControl, but what it needs is a DotNetObject.
Is there a different way addEventHandler() should be used? Or some other way to add an event callback to a DotNet control?
Thanks!
|
|
magicm
02-24-2008, 04:48 PM
DotNetControls are wrapped dotNet controls made to behave exactly like all default UI controls (button, spinner etc). So they also utilize the same event system as the regular maxscript controls:
(
rollout DotNetTest "DotNet Test" width:80 height:40
(
dotNetControl DotNetButton "System.Windows.Forms.Button" width:60 height:30
on DotNetTest open do
(
DotNetButton.Text = "Click Me!"
)
on DotNetButton Click do
(
print "Click!"
)
)
createDialog DotNetTest
)
Instead of placing DotNetControls on a rollout, you can also build a DotNet Form yourself. In this case you need the addEventHandler method to catch the events of the controls (DotNetObjects):
(
-- Create a form
local DotNetForm = DotNetObject "System.Windows.Forms.Form"
DotNetForm.Size = (DotNetObject "Drawing.Size" 200 80)
-- Create a button
local DotNetButton = DotNetObject "System.Windows.Forms.Button"
DotNetButton.Text = "Click Me!"
DotNetButton.Location = (DotNetObject "Drawing.Point" 10 10)
-- Create another button
local DotNetButton2 = DotNetObject "System.Windows.Forms.Button"
DotNetButton2.Text = "Or Me!"
DotNetButton2.Location = (DotNetObject "Drawing.Point" 100 10)
-- The "Click" event calls this function (see below)
fn OnButtonClick s e =
(
format "Click!\n\tSender : %\n\tMouse Pos : %\n" s.Text [e.X, e.Y]
)
-- Setup an event handler for both buttons
dotNet.addEventHandler DotNetButton "Click" OnButtonClick
dotNet.addEventHandler DotNetButton2 "Click" OnButtonClick
-- Add the buttons to the form
DotNetForm.Controls.AddRange #(DotNetButton, DotNetButton2)
-- Show the form
DotNetForm.Show()
)
Cheers,
Martijn
Jon-Huhn
02-25-2008, 10:37 AM
Thanks, Martijn
So the take-home message I got from your post is that as long as I'm embedding a DotNet control in a maxscript rollout, I'm limited to just the event callbacks that are exposed through maxscript. However, if I was willing to build the whole form out of DotNet, then I could add as many additional callbacks as I wanted?
It's not practical for me to go completely DotNet at this point, but I can it as a possibility in the future as I get more comfortable with more of the available controls.
Thanks!
magicm
02-25-2008, 05:03 PM
So the take-home message I got from your post is that as long as I'm embedding a DotNet control in a maxscript rollout, I'm limited to just the event callbacks that are exposed through maxscript. However, if I was willing to build the whole form out of DotNet, then I could add as many additional callbacks as I wanted?
Yes that's pretty much it ;)
Cheers,
Martijn
CGTalk Moderation
02-25-2008, 05:03 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.
vBulletin v3.0.5, Copyright ©2000-2012, Jelsoft Enterprises Ltd.