论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
物联网
›
物联网
›
阿赵的MaxScript学习笔记分享十六《MaxScript和WinForm ...
阿赵的MaxScript学习笔记分享十六《MaxScript和WinForm交互》 ...
莫张周刘王
金牌会员
|
2025-1-3 07:06:05
|
显示全部楼层
|
阅读模式
楼主
主题
858
|
帖子
858
|
积分
2574
MaxScript学习笔记目录
各人好,我是阿赵。
之前有网友给我留言说MaxScript和DotNet的WinForm界面交互有问题。我回头看了一下,发现之前的MaxScript文章是漏了这部分没有阐明,这里补充一下。这里的内容重要是用C#写一个WinForm界面,然后导出给MaxScript使用和交互。
一、 WinForm部分
1、创建WinForm界面
这里我简单的建一个C#的WinForm项目,然后简单的做一个界面:
这个界面的名字就叫做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使用。
先找到项目属性:
然后把输出范例给出类库:
最后在生成里面选择生成解决方案:
这里要记着本身项目的项目名称,比如我这个项目的名称是:DotnetUITest
然后在生成的地方可以看到了这个项目的dll文件。
二、 MaxScript部分
1、 显示WinForm
先写以下代码,用于显示WinForm
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的界面显示出来了:
为了测试一下里面的功能是否正常,之前给button1写了个点击处置惩罚方法,每点一下,TextBox里面的数字会加一:
到这里,界面显示没问题。
2、 找到界面里面的按钮并注册点击事件
接着写代码:
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:
会出现弹窗:
并且在MaxScript Listener里面出现打印内容:
3、 修改原有的按钮内容:
继续修改代码,给button2修改一下text:
运行脚本,会看到button2的文本被改变了:
4、 新增按钮
接下来不获取button2,而是直接往Form1里面新增一个按钮:
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里面,然后修改它的文本和位置,这时间运行脚本,会看到:
5、 从WinForm方法获取值
实在之前获取button2的时间,我们就是通过调用GetButton2方法来返回了一个按钮对象。
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的值会变,然后点新增的按钮,可以把当前的值打印出来:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
莫张周刘王
金牌会员
这个人很懒什么都没写!
楼主热帖
06、etcd 写请求执行流程
软件测试项目实战经验附视频以及源码【 ...
四、WinUI3下TitleBar的自定义
网上书店管理系统项目【Java数据库编程 ...
【云原生】三、详细易懂的Docker 容器 ...
c# sqlsugar,hisql,freesql orm框架全 ...
物联网5种无线传输协议特点大汇总 ...
MySQL用户和权限管理
面向大规模神经网络的模型压缩和加速方 ...
如何用同一套账号接入整个研发过程? ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表