Итак нам понадобится:
1. Установленная
2. Уcтановленные необходимые
Приступаем
1. Переходим в Visual Studio и устанавливаем расширения для поддержки C#: C# Dev Kit, vscode-runner, .NET Meteor
2. Создаём и открываем папку и создаём новое windows forms приложение, написав в терминале: dotnet new winforms
3. Открываем Form1.Designer.cs и добавляем в класс Form1
private System.Windows.Forms.WebBrowser webBrowser1;
4. В методе InitializeComponent:
private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.webBrowser1 = new System.Windows.Forms.WebBrowser(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); // первичный размер основной формы this.Text = "Form1"; this.webBrowser1.Name = "webBrowser1"; //инициализируем обьект браузера this.webBrowser1.ScrollBarsEnabled = false; this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.WebBrowser1DocumentCompleted); this.webBrowser1.AllowWebBrowserDrop = false; this.webBrowser1.IsWebBrowserContextMenuEnabled = false; this.webBrowser1.WebBrowserShortcutsEnabled = false; this.webBrowser1.ObjectForScripting = this; string curDir = Directory.GetCurrentDirectory(); this.webBrowser1.Url = new System.Uri(String.Format("file:///{0}/interface/title.html", curDir)); //адрес странички нашего интерфейса this.ResizeEnd += new EventHandler(Form1_ResizeEnd); //при изменении размера изменяем и размер контрола "браузера" this.Controls.Add(this.webBrowser1); this.ResumeLayout(false); this.PerformLayout(); }
5. Добавляем методы - обработчики событий (Events):
private void WebBrowser1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height); } private void Form1_ResizeEnd(object sender, System.EventArgs e) { this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height); }
Полный код модуля:
namespace AIR_MASTER_CONTROL; partial class Form1 { private System.ComponentModel.IContainer components = null; private System.Windows.Forms.WebBrowser webBrowser1; protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void WebBrowser1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height); } private void Form1_ResizeEnd(object sender, System.EventArgs e) { Control control = (Control)sender; this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height); } private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.webBrowser1 = new System.Windows.Forms.WebBrowser(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); this.Text = "Form1"; this.webBrowser1.Name = "webBrowser1"; this.webBrowser1.ScrollBarsEnabled = false; this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.WebBrowser1DocumentCompleted); this.webBrowser1.AllowWebBrowserDrop = false; this.webBrowser1.IsWebBrowserContextMenuEnabled = false; this.webBrowser1.WebBrowserShortcutsEnabled = false; this.webBrowser1.ObjectForScripting = this; this.ResizeEnd += new EventHandler(Form1_ResizeEnd); string curDir = Directory.GetCurrentDirectory(); this.webBrowser1.Url = new System.Uri(String.Format("file:///{0}/interface/index.html", curDir)); this.Controls.Add(this.webBrowser1); this.ResumeLayout(false); this.PerformLayout(); } }
6. В папке со скомпилированным бинарником создаём папку interface, а внутри неё файл index.html
7. Мы можем вызывать функции JavaScript (находящиеся в файле /interface/index.html) из нашей C# программы, например, следующим образом:
SetValuesToHTML(webBrowser1.Document, ref ValuesOfSource); // передаём ссылку на массив чисел типа float
public Int16 SetValuesToHTML(System.Windows.Forms.HtmlDocument document, ref float[] ValuesOfSource)
{
Object[] objArray = new Object[3];
for (int i = 0; i < 3; i++)
objArray[i] = (Object)(ValuesOfSource[i]);
document.InvokeScript("SetValuesToHTML", objArray); // функция, принимающая массив чисел типа (в JavaScript)
return 0;
}
На стороне JavaScript принимающий метод:
function SetValuesToHTML(current, voltage, temperature){ document.all['Current'].value = current; document.all['Voltage'].value = voltage; document.all['Temperature'].value = temperature; }
8. Мы можем вызывать функции(методы) С# из JavaScript следующим образом:
window.external.SendSettingsCOM(document.all['number'].value);На стороне C# вызываемый метод - внутри класса Form1:
public void SendSettingsCOM (int ExtraParam){ // transfer settings to COM-port
byte[] data = { 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00};
if (ExtraParam < 0)
data[1] = 0x00;
else
if(ExtraParam != 0 )
data[1] = 0x01;
data[2] = (byte)((ExtraParam < 0) ? -ExtraParam : ExtraParam);
if(MyPort != null)
MyPort.Write(data, 0, data.Length);
}