Итак нам понадобится:
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);
}
