JScript Dot_NET GUI example

За да се програмира под .NET платформата е достатъчно да се инсталира някоя версия на фреймърка.
След инсталацията на .NET фреймуърк автоматично се инсталират няколко компилатора:
csc.exe – компилатор за C Sharp (C#)
jsc.exe – компилатор за JScript .Net
vbc.exe – компилатор за Visual Basic .Net

В момента имам инсталиран .Net framework 2.0 и работя с него, но предполагам, че и при по-новите версии ситуацията ще е подобна. Компилаторите се намират в директорията: C:\WINDOWS\ServicePackFiles\i386>
Аз харесвам JScript като структуриране на програмите и ще използвам него за конкретния пример. Както и в други GUI-примери, ще използвам и сега примерна програма за конвертиране на температура от Целзий до Фаренхайт.
Преди да поставя реалния код, ще покажа базов, рамкиращ код за това как се програмира подобна програма с графичен интерфейс:

import System;
import System.Drawing;
import System.Collections;
import System.Windows.Forms;
import System.ComponentModel;
import Accessibility;
 
public class Exercise extends System.Windows.Forms.Form {
    // var ...;
 
	function Exercise(){
		InitializeComponent();
		this.button1.add_Click(this.button1_Click);
	}
 
	function button1_Click(sender : Object, e : System.EventArgs){
		//...
	}
 
	function InitializeComponent(){
		// iniciirat se wsi4ki komponenti ot GUI-to
		this.textBox1 = new System.Windows.Forms.TextBox();
		// ...
	}
}
var frmPledge : Exercise = new Exercise();
frmPledge.ShowDialog();

На база на този пример попълваме целия необходим код. Помогнах си за интерфейса с SharpDevelop 3.2 – чудесна програма за .NET програмиране. За съжаления програмата нативно не поддържа JScript, за това от нея копирам само кода за формата, като леко го промених. Програмата изглежда така:
faren_to_celsius

Кода е сравнително лесен за писане и разбиране. Самото exe е едва 8kb. С включения сорс код може да се изтегли от тук: fahrenheit to celsius

import System;
import System.Drawing;
import System.Collections;
import System.Windows.Forms;
import System.ComponentModel;
import Accessibility;
 
public class Exercise extends System.Windows.Forms.Form {
    var button1  : System.Windows.Forms.Button;
    var textBox1 : System.Windows.Forms.TextBox;
    var textBox2 : System.Windows.Forms.TextBox;
 
	function Exercise(){
		InitializeComponent();
		this.button1.add_Click(this.button1_Click);
	}
 
	function button1_Click(sender : Object, e : System.EventArgs){
		var Faren : double;
		var Celsius : double;
		Faren = ConvertToDouble(this.textBox1.Text);
		if(!isNaN(Faren)){
			Celsius = (Faren - 32)*5/9;
			this.textBox2.Text = Celsius.ToString();
		} else {
			this.textBox2.Text = "Wrong format";
		}
	}
 
	function ConvertToDouble(valueto){
		var ddd = valueto.ToString(System.Globalization.CultureInfo.InvariantCulture)
		return ddd;
	}
 
 
	function InitializeComponent(){
		// iniciirat se wsi4ki komponenti ot GUI-to
		this.textBox1 = new System.Windows.Forms.TextBox();
		this.button1 = new System.Windows.Forms.Button();
		this.textBox2 = new System.Windows.Forms.TextBox();
		this.SuspendLayout();
		// 
		// textBox1
		// 
		this.textBox1.Location = new System.Drawing.Point(12, 12);
		this.textBox1.Name = "textBox1";
		this.textBox1.Size = new System.Drawing.Size(100, 20);
		this.textBox1.TabIndex = 0;
		// 
		// button1
		// 
		this.button1.Location = new System.Drawing.Point(118, 10);
		this.button1.Name = "button1";
		this.button1.Size = new System.Drawing.Size(75, 23);
		this.button1.TabIndex = 1;
		this.button1.Text = "Convert";
		this.button1.UseVisualStyleBackColor = true;
		// 
		// textBox2
		// 
		this.textBox2.Location = new System.Drawing.Point(199, 12);
		this.textBox2.Name = "textBox2";
		this.textBox2.Size = new System.Drawing.Size(100, 20);
		this.textBox2.TabIndex = 2;
		// 
		// MainForm
		// 
		this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
		this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
		this.ClientSize = new System.Drawing.Size(311, 46);
		this.Controls.Add(this.textBox2);
		this.Controls.Add(this.button1);
		this.Controls.Add(this.textBox1);
 
		this.Name = "Exercise";
		this.Text = "faren_to_celsius";
		this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
		this.MaximizeBox = false;
		this.MinimizeBox = false;
	}
}
 
var frmPledge : Exercise = new Exercise();
 
frmPledge.ShowDialog();

За да се компилира този код до изпълнимо exe правим следното:

  • запазваме сорс-кода в файла, примерно far_to_cel.js
  • отваряме команден прозорец cmd (Start -> Run -> cmd). Или натискаме шифт и кликаме в директорията със сорс-кода, след това избираме “Open command window here”.
  • след като сме позиционирали cmd в директорията със сорс-файла ще трябва да извикаме компилатора jsc.exe:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\jsc.exe /t:winexe far_to_cel.js

Ако не се покаже грешка, значи сме компилирали всичко нормално.

===================

Прилагам същата програмка, но написана на C#:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Globalization;
 
public class CelToFar : Form {
 
  Button button1;
  TextBox textBox1;
  TextBox textBox2;
 
  public CelToFar() {
    button1 = new Button(); 
    button1.Text = "Calculate";
    button1.AutoSize = false;
    button1.Location = new Point(80, 15);
    button1.Size = new Size(75, 23);
 
    textBox1 = new TextBox();
    textBox1.Location = new Point(12, 12);
    textBox1.Name = "textBox1";
    textBox1.Font = new Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
    textBox1.Size = new Size(60, 40);
    textBox1.Text = "";
 
    textBox2 = new TextBox();
    textBox2.Location = new Point(165, 12);
    textBox2.Name = "textBox2";
    textBox2.Font = new Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
    textBox2.Size = new Size(60, 40);
    textBox2.Text = "";
 
    button1.Click += new EventHandler(ButtonClicked);
 
    this.Controls.Add(button1);
    this.Controls.Add(textBox1);
    this.Controls.Add(textBox2);
 
    this.Height = 120;
    this.Width = 255;
    this.StartPosition = FormStartPosition.CenterScreen;
    this.Visible = true;
  }
 
  public void ButtonClicked(object source, EventArgs e) {
    string FarenTxt = this.textBox1.Text;
    double Faren;
    double Celsius;
    Regex rgx = new Regex(@"^[\d\.]*$");
 
    if(rgx.IsMatch(FarenTxt) && !String.IsNullOrEmpty(FarenTxt)){
      Faren = Convert.ToDouble(FarenTxt, CultureInfo.InvariantCulture);
      Celsius = (Faren - 32)*5/9;
      this.textBox2.Text = System.Math.Round((decimal)Celsius, 3).ToString(CultureInfo.InvariantCulture);
    } else {
      this.textBox2.Text = "Wrong format";
    }
  }
 
  static void Main() {
    Application.Run(new CelToFar());
  }
}

Запазваме файла с името Far_to_celsius.cs, след което компилиарнето на кода става по подобен начин:

1
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:winexe Far_to_celsius.cs