阿赵的MaxScript学习笔记分享十六《MaxScript和WinForm交互》
MaxScript学习笔记目录各人好,我是阿赵。
之前有网友给我留言说MaxScript和DotNet的WinForm界面交互有问题。我回头看了一下,发现之前的MaxScript文章是漏了这部分没有阐明,这里补充一下。这里的内容重要是用C#写一个WinForm界面,然后导出给MaxScript使用和交互。
一、 WinForm部分
1、创建WinForm界面
这里我简单的建一个C#的WinForm项目,然后简单的做一个界面:
https://i-blog.csdnimg.cn/direct/66ac9427a45c4bedaec1ae7e67ca69a3.png#pic_center
这个界面的名字就叫做Form1,各位也可以根据本身环境起名字。不过这个名字是需要记下来的,因为在MaxScript里面调用,需要这个名字。
在Form1里面有一个TextBox和2个Button。然后在里面写入一些简单的代码:
using System;
using System.Windows.Forms;
namespace DotnetUITest
{
public partial class Form1 : Form
{
private int num = 0;
public Form1()
{
InitializeComponent();
}
//获取当前的num值
public int GetCurrentNum()
{
return num;
}
//获取第二个按钮,用于给MaxScript注册点击事件
public Button GetButton2()
{
return button2;
}
//按钮1本地点击功能测试
private void button1_Click(object sender, EventArgs e)
{
num++;
textBox1.Text = num.ToString();
}
}
}
2、 导出dll
做好界面和代码之后,要把这个界面导出成dll给MaxScript使用。
先找到项目属性:
https://i-blog.csdnimg.cn/direct/ce4d94b0ea124464bec02bd7e0b51157.png#pic_center
然后把输出范例给出类库:
https://i-blog.csdnimg.cn/direct/948b9f1d46134ffd9267cacad60ba108.png#pic_center
最后在生成里面选择生成解决方案:
https://i-blog.csdnimg.cn/direct/404a494a7010422ab865d4771fe25376.png#pic_center
这里要记着本身项目的项目名称,比如我这个项目的名称是:DotnetUITest
然后在生成的地方可以看到了这个项目的dll文件。
https://i-blog.csdnimg.cn/direct/28c42d0953ea4b948cb03a71c87a8cae.png#pic_center
二、 MaxScript部分
1、 显示WinForm
先写以下代码,用于显示WinForm
https://i-blog.csdnimg.cn/direct/3a60620ebc5d4cad95d31a2246b7170a.png#pic_center
fn main =(
dotnet.loadAssembly ("D:/DotnetUITest.dll")
global Form1 = dotnetObject "DotnetUITest.Form1"
Form1.Show()
)
main()
阐明:
我是简单的把dll文件放在了d盘,以是通过:
dotnet.loadAssembly ("D:/DotnetUITest.dll")
就可以把这个指定的dll加载进来。
然后需要加载Form1,需要通过一个全局变量把Form1保存起来:
global Form1 = dotnetObject "DotnetUITest.Form1"
最后把Form1显示出来
Form1.Show()
写好代码之后,按Ctrl+E运行脚本,会看到WinForm的界面显示出来了:
https://i-blog.csdnimg.cn/direct/bf88d06941db41c49688b7137c71ddd4.png#pic_center
为了测试一下里面的功能是否正常,之前给button1写了个点击处置惩罚方法,每点一下,TextBox里面的数字会加一:
https://i-blog.csdnimg.cn/direct/9ded9cf8de974bc0b494c97f305cdbfb.png#pic_center
到这里,界面显示没问题。
2、 找到界面里面的按钮并注册点击事件
接着写代码:
https://i-blog.csdnimg.cn/direct/2b04e581a6654af6a5b68e3a8e2c3ba2.png#pic_center
fn main =(
dotnet.loadAssembly ("D:/DotnetUITest.dll")
global Form1 = dotnetObject "DotnetUITest.Form1"
Form1.Show()
)
main()
fn clickBtnHandle sender args =
(
local content = "click from winform"
messageBox content
print content
)
fn AddBtnHandleFn =
(
local button = Form1.GetButton2()
dotNet.addEventHandler button "Click" clickBtnHandle
)
AddBtnHandleFn() 这里做了2个变乱:
1. 写一个点击按钮的回调处置惩罚方法
fn clickBtnHandle sender args =
(
local content = "click from winform"
messageBox content
print content
)
如果按钮被点击,这里会弹窗和打印"click from winform",证实按钮被点击了。
2. 注册点击事件
fn AddBtnHandleFn =
(
local button = Form1.GetButton2()
dotNet.addEventHandler button "Click" clickBtnHandle
)
由于Form1我留了个方法叫做GetButton2,会把button2返回,以是这里调用就可以获得button2了
然后通过
dotNet.addEventHandler button "Click" clickBtnHandle
把这个按钮的点击事件注册为clickBtnHandle
这个时间再运行脚本,点击button2:
https://i-blog.csdnimg.cn/direct/8495d29056b44619b1b82a8f24442990.png#pic_center
会出现弹窗:
https://i-blog.csdnimg.cn/direct/f11a80f80d7f4c8c819d303e36d83fcf.png#pic_center
并且在MaxScript Listener里面出现打印内容:
https://i-blog.csdnimg.cn/direct/45e3f6e385f84aeeac9944f60aaa7e24.png#pic_center
3、 修改原有的按钮内容:
继续修改代码,给button2修改一下text:
https://i-blog.csdnimg.cn/direct/f5888d3206c84942b8481d6ee19e52b6.png#pic_center
运行脚本,会看到button2的文本被改变了:
https://i-blog.csdnimg.cn/direct/e5ccba2d5772446a8717adda4122f927.png#pic_center
4、 新增按钮
接下来不获取button2,而是直接往Form1里面新增一个按钮:
https://i-blog.csdnimg.cn/direct/94d960087bab4291942d4c74f9292ef0.png#pic_center
fn main =(
dotnet.loadAssembly ("D:/DotnetUITest.dll")
global Form1 = dotnetObject "DotnetUITest.Form1"
Form1.Show()
)
main()
fn clickBtnHandle sender args =
(
local content = "click from winform"
messageBox content
print content
)
fn AddBtnHandleFn = ( --local button = Form1.GetButton2() local button = dotNetObject "System.Windows.Forms.Button" Form1.controls.add button button.text = "new Button" button.Location.x = 10 button.Location.y = 50 dotNet.addEventHandler button "Click" clickBtnHandle
)AddBtnHandleFn() 这里重要改变的代码是:
local button = dotNetObject “System.Windows.Forms.Button”
Form1.controls.add button
button.text = “new Button”
button.Location.x = 10
button.Location.y = 50
新增了一个按钮,并且添加到Form1的controls里面,然后修改它的文本和位置,这时间运行脚本,会看到:
https://i-blog.csdnimg.cn/direct/4f59d5ce084f46cc8c1923d3e3f2522d.png#pic_center
5、 从WinForm方法获取值
实在之前获取button2的时间,我们就是通过调用GetButton2方法来返回了一个按钮对象。
https://i-blog.csdnimg.cn/direct/86890a255c6f4770bbe1ebe4303d857e.png#pic_center
fn main =(
dotnet.loadAssembly ("D:/DotnetUITest.dll")
global Form1 = dotnetObject "DotnetUITest.Form1"
Form1.Show()
)
main()
fn clickBtnHandle1 sender args = ( local content = "click from winform" messageBox content print content) fn clickBtnHandle2 sender args = ( local num = Form1.GetCurrentNum() print num)fn AddBtnHandleFn = ( local button2 = Form1.GetButton2() dotNet.addEventHandler button2 "Click" clickBtnHandle1 local button3 = dotNetObject "System.Windows.Forms.Button" Form1.controls.add button3 button3.text = "new Button" button3.Location.x = 10 button3.Location.y = 50 dotNet.addEventHandler button3 "Click" clickBtnHandle2 )AddBtnHandleFn() 这里稍微再重复一下,首先把button2和新增的按钮都注册了差异的点击方法,然后新按钮的点击方法,从Form1里面调用GetCurrentNum方法获得一个数值,并且打印出来:
过程就不再重复,直接运行,可以看到,点button1,num的值会变,然后点新增的按钮,可以把当前的值打印出来:
https://i-blog.csdnimg.cn/direct/bb4d5e73484b48efb95cbff76e125b2a.png#pic_center
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]