使用EJS进行GUI编程(二)

三月 11, 2015 at 11:04 下午Easton

在上一篇博文使用EJS进行GUI编程(一)》中我们初步了解了如何使用EJS进行GUI编程,本文将进一步讲解如何使用EJS进行GUI编程。

前一个例子运行之后只是弹出一个窗口,里面有文本框和按钮,并且单击按钮可以触发单击事件。拥有了这些知识后其实你已经有能力制作一个登录窗口了,当然,得出这个结论的前提我是假设读者已经具备一定的前台编程功底,并且会使用AJAX之类的方式进行编程。

1、在进行GUI编程前,我们首先需要了解什么叫控件?

     在计算机编程当中,控件(或部件,widget或control)是一种图形用户界面元素,其显示的信息排列可由用户改变,例如视窗或文本框(源于维基百科http://ily.so/RFnq2e)。在EJS内集成了.NET 4.0框架内所有的原生Windows控件,这些控件有文本框、按钮、单选框、复选框、列表等等。总之,在System.Windows.Forms命名空间内的所有控件理论上EJS都是支持的。这里http://ily.so/7Zbi6j是微软关于System.Windows.Forms命名空间的介绍及详细的文档。

2、如何在EJS中引用这些.NET控件?

     在EJS引擎中内置了一个System命名空间,通过这个命名空间我们可以访问它下面的命名空间,例如:System.Windows.Forms,这与java的包类似,但是它是虚拟的目录,并不是实实在在的目录,它只是逻辑上的结构。System的Windows的Forms命名空间,OK,我们可以把“.”读成“的”,当然,这只是为了便于理解,我并没有看到哪个文章有类似的叫法。同样,维基百科上也有命名空间的词条(http://ily.so/AjuQf2),词条里有个例子是这样的。例如:设Bill是X公司的员工,工号为123,而John是Y公司的员工,工号也是123。由于两人在不同的公司工作,可以使用相同的工号来标识而不会造成混乱,这里每个公司就表示一个独立的命名空间。如果两人在同一家公司工作,其工号就不能相同了,否则在支付工资时便会发生混乱。

     用了那么大篇幅介绍命名空间,如果读者还是看不懂,那就把System.Windows.Forms当做一个控件包好了,里面有许许多多的控件。现在我们只需要知道在System.Windows.Forms命名空间里面有什么?我们应该怎么把这些东西引用到EJS里面?

     在微软关于System.Windows.Forms命名空间的介绍及详细文档内有这个命名空间内包含的所有控件(http://ily.so/7Zbi6j),在EJS里我们应该使用变量去引用命名空间内的控件。

//引用一个窗体控件
var Form = System.Windows.Forms.Form;
//引用一个按钮控件
var Button = System.Windows.Forms.Button;

这样应该能明白在EJS中如何引用控件了,其实只要在命名空间后加“.”,然后接上控件的名称即可。

在微软关于System.Windows.Forms命名空间的文档中,拥有所有的控件信息,只要参考文档进行操作即可。

 

下面再通过一个小例子进一步学习EJS的GUI编程,在例子中新增了几个事件,大家有兴趣的可以查询下MSDN的介绍。

console.hide();
//引用.NET框架内的类
var Form = System.Windows.Forms.Form;
var FormStartPosition = System.Windows.Forms.FormStartPosition;
var Button = System.Windows.Forms.Button;
var TextBox = System.Windows.Forms.TextBox;
var Application = System.Windows.Forms.Application;
var Point = System.Drawing.Point;
var Size = System.Drawing.Size;
var FormBorderStyle = System.Windows.Forms.FormBorderStyle;
var Icon = System.Drawing.Icon;
var ScrollBars = System.Windows.Forms.ScrollBars;
var AnchorStyles = System.Windows.Forms.AnchorStyles;

//实例化类
var frm = new Form();
frm.Text = "EJS GUI编程实例";
frm.Size = new Size(800, 500);
//frm.MaximizeBox = false;
frm.StartPosition = FormStartPosition.CenterScreen;
//frm.FormBorderStyle = FormBorderStyle.FixedSingle;
frm.Icon = new Icon(path.dir + "\\icons\\sjs.ico");
frm.ShowInTaskbar = false;
frm.TopMost = true;
var txt = new TextBox();
txt.Text = "http://";
txt.Location = new Point(20, 20);
txt.Size = new Size(500, txt.Size.Height);
frm.Controls.Add(txt);
var txt2 = new TextBox();
txt2.Multiline = true;
txt2.Location = new Point(20, 90);
txt2.Size = new Size(745, 360);
txt2.ScrollBars = ScrollBars.Both;
txt2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top);
frm.Controls.Add(txt2);
var btn = new Button();
btn.Text = "获取";
btn.Location = new Point(20, 50);
btn.Click += function(sender, e)
{
	try
	{
		txt2.Text = http.get(txt.Text, "utf-8");
		console.log("click:" + sender.Text);
	}
	catch(e)
	{
		alert(e.message);
	}
};
btn.MouseLeave += function(sender, e)
{
	//alert("离开了");
	console.log("离开了");
};
btn.MouseUp += function(sender, e)
{
	console.log("按下了");
	//alert("按下了");
};
frm.AcceptButton = btn;
frm.Controls.Add(btn);

//运行
Application.Run(frm);
console.show();	//如果不显示则在cmd模式下将会不现实cmd窗口

这个小例子是一个网页源码获取器,输入URL后可以把网页源代码从网站服务器中下载回来,并显示在下方的文本框内。

 

本篇文章就写到这里,如果有问题可以在评论里给我留言,我看到后会第一时间回复。

Posted in: EJSTool

Tags:

添加评论

  Country flag

biuquote
  • 评论
  • 在线预览
Loading