資料鏈接:Microsoft Windows 窗體
Windows 窗體,是一種基於 Windows 的應用程序,說白了就是給企業和最終用戶使用的客戶端。
窗體的設計
1 新建 windows窗體運用
2 複製GTS800.cfg和gts.dll文件到/bin/debug文件夾下;複製gts.cs文件到和 Program.cs文件同級的文件夾內。
這些文件其實就是動態鏈接庫和函數聲明文件等文件,他們包含了該款控制卡配套的廠家開發的函數,用戶開發就是調用這些函數。
3 然後再在工具箱中選擇 label,textbox,timer 控件放到 form1 中,並打開屬性頁面,將其 text 屬
性改成圖中所示名稱,如圖:
4 依次雙擊所有按鈕button1-6以及 timer1,就會在Form1.cs文件中自動生成其響應函數,而下一步就是自己在響應函數裏編程。
Form1.cs 文件代碼
編程時可以看編程手冊,由於剛入門,現在只是驗證性地看一下編程手冊,知道一下爲什麼是這麼寫,在哪裏可以看到這個函數,它的函數作用以及函數原型是什麼,碼代碼Ctrl+J快捷鍵可以打開自動提示,能夠提醒函數原型,非常防脫髮。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 點位運動1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定義全局變量
bool flag = false;
short rtn;
int pos, vel;
uint clk;
double prfpos, prfvel, encpos, encvel;
short AXIS = 1;//定義當前軸爲1軸
//初始化
private void button1_Click(object sender, EventArgs e)
{
rtn = gts.mc.GT_Open(0, 1);//打開控制卡
rtn = gts.mc.GT_Reset();//控制卡復位
rtn = gts.mc.GT_LoadConfig("GTS800.cfg");//加載配置文件
rtn = gts.mc.GT_ClrSts(1, 8);//清除狀態,從1軸開始,最多8個軸
timer1.Enabled = true;//開啓定時器
}
//清除狀態
private void button2_Click(object sender, EventArgs e)
{
rtn = gts.mc.GT_ClrSts(1, 8);//清除狀態
}
//伺服使能
private void button3_Click(object sender, EventArgs e)
{
if(flag==false)//判斷伺服標誌位
{
gts.mc.GT_AxisOn(AXIS);//開伺服
button3.Text = "伺服開啓";
flag = !flag;
}
else if(flag==true)
{
gts.mc.GT_AxisOff(AXIS);//關伺服
button3.Text = "伺服關閉";
flag = !flag;
}
}
//位置清零
private void button4_Click(object sender, EventArgs e)
{
gts.mc.GT_ZeroPos(1, 8);//位置清零,從1軸開始,最多8個軸
}
private void button5_Click(object sender, EventArgs e)
{
timer1.Start();//開啓定時器顯示
rtn = gts.mc.GT_PrfTrap(AXIS);//設置當前軸爲點位運動模式
gts.mc.TTrapPrm trapprm; //定義爲點位運動結構體變量
gts.mc.GT_GetTrapPrm(AXIS, out trapprm);//讀取點位模式運動參數
trapprm.acc = 0.1;//設置加速度
trapprm.dec = 0.1;//設置減速度
trapprm.smoothTime = 1;//設置平滑時間
gts.mc.GT_SetTrapPrm(AXIS, ref trapprm);//設置點位運動參數
pos += Convert.ToInt32(textBox1.Text);//獲取輸入框內數字
vel = Convert.ToInt32(textBox2.Text);//轉換爲int32位
rtn = gts.mc.GT_SetPos(AXIS, pos);//設置目標位置
rtn = gts.mc.GT_SetVel(AXIS, vel);//設置目標速度
rtn = gts.mc.GT_Update(AXIS);
}
//停止運動
private void button6_Click(object sender, EventArgs e)
{
timer1.Stop();//關閉定時器
rtn = gts.mc.GT_Stop(AXIS, 0);//停止運動
}
//使用定時器顯示狀態
private void timer1_Tick(object sender, EventArgs e)
{
gts.mc.GT_GetPrfPos(AXIS, out prfpos, 1, out clk);// 讀取規劃位置
gts.mc.GT_GetPrfPos(AXIS, out encpos, 1, out clk);//讀取實際位置
textBox3.Text = prfpos.ToString();
textBox5.Text = encpos.ToString();
gts.mc.GT_GetPrfVel(AXIS, out prfvel, 1, out clk);//讀取規劃速度
gts.mc.GT_GetPrfVel(AXIS, out encvel, 1, out clk);//讀取實際速度
textBox4.Text = prfvel.ToString();
textBox6.Text = encvel.ToString();
}
}
}
啓動運行或者F5,運行效果
多窗體
一般來說,一個應用由一個主頁面,然後按照功能進行分組,所以有種方法是運行進入主窗體,通過菜單選擇功能子窗體。
1 添加窗體,即cs文件,然後在工具欄中添加menuskrip控件,添加Picturebox導入圖片,命名如下:
2 同樣雙擊menuskrip中的子選項就可以創建點擊響應函數,我們添加代碼:
Form1 dianwei = new Form1();// 打開窗體1
dianwei.Show();
//this.Close();// 關閉此窗體
Form0.cs文件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 點位運動1
{
public partial class Form0 : Form
{
public Form0()
{
InitializeComponent();
}
private void 點位運動ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 dianwei = new Form1();
dianwei.Show();
//this.Close();
}
}
}
改寫program. cs中Application.Run(new Form0());//打開窗體0
,讓運行開啓主窗體。
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form0());//打開窗體0
}
}
運行效果:
這樣子其實會無限打開,所以應該需要加個檢測該窗體是否打開的判斷。
如果是用Form1 f1 = new Form1(); f1.ShowDialog();
,是切換到1窗體,鼠標是不能操控主窗體了;