📄 gpsform.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using GPSExample.Util;
namespace cfWorldWind
{
public partial class GpsForm : Form
{
private GPSReader _gpsReader;
public GpsForm(GPSReader gpsReader)
{
InitializeComponent();
this._gpsReader = gpsReader;
}
private void GpsForm_Load(object sender, EventArgs e)
{
_gpsReader.OnGPSMessage += new GPSEventHandler(_gpsReader_OnGPSMessage);
_gpsReader.OnGPSReadStart += new EventHandler(_gpsReader_OnGPSReadStart);
_gpsReader.OnGPSReadStop += new EventHandler(_gpsReader_OnGPSReadStop);
UpdateButtons();
}
private void GpsForm_Closing(object sender, CancelEventArgs e)
{
_gpsReader.OnGPSMessage -= new GPSEventHandler(_gpsReader_OnGPSMessage);
_gpsReader.OnGPSReadStart -= new EventHandler(_gpsReader_OnGPSReadStart);
_gpsReader.OnGPSReadStop -= new EventHandler(_gpsReader_OnGPSReadStop);
}
private void UpdateButtons()
{
if (_gpsReader.ReadData == true)
{
btnStart.Enabled = false;
btnStop.Enabled = true;
}
else
{
btnStart.Enabled = true;
btnStop.Enabled = false;
}
}
private void btnStart_Click(object sender, EventArgs e)
{
try
{
string comPort = txtCom.Text.Trim();
string strBaud = txtBaud.Text.Trim();
int baudRate = Int32.Parse(strBaud);
//_gpsReader = new GPSReader(comPort, baudRate);
_gpsReader.PortName = comPort;
_gpsReader.BaudRate = baudRate;
lblMessageType.Text = "Read Starting...";
_gpsReader.StartRead();
UpdateButtons();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void btnStop_Click(object sender, EventArgs e)
{
try
{
lblMessageType.Text = "Read Stopping...";
_gpsReader.StopRead();
UpdateButtons();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// This event is called everytime a GPS sentence is received by the GPSReader
/// </summary>
/// <param name="sender"></param>
/// <param name="arg"></param>
private void _gpsReader_OnGPSMessage(object sender, GPSEventArgs arg)
{
// Add the complete sentence to the listbox
lbMessageDisplay.Items.Insert(0, arg.MessageText);
if (lbMessageDisplay.Items.Count > 8)
lbMessageDisplay.Items.RemoveAt(8);
// Update the appropriate screen fields based on the message type
switch (arg.MessageType)
{
case "GPGGA":
lblTime.Text = ((int)arg.Time).ToString("D6"); // Show only whole time value
lblLat.Text = arg.Lat.ToString("F6"); // Show exactly 6 decimal places
lblLatDirection.Text = arg.LatDirection;
lblLon.Text = arg.Lon.ToString("F6"); // Show exactly 6 decimal places
lblLonDirection.Text = arg.LonDirection;
lblNumSats.Text = arg.NumSats.ToString();
lblQuality.Text = arg.Quality.ToString();
break;
case "GPGSA":
lblFixType.Text = arg.FixType.ToString();
break;
case "GPRMC":
lblBearing.Text = arg.Bearing.ToString();
break;
case "GPVTG":
lblBearing.Text = arg.Bearing.ToString();
break;
}
}
/// <summary>
/// This method is called when the background thread enters the GPS Read loop
/// It is not required that your code handle this event. It simply provides a confirmation
/// that the reading process has actually begun
/// </summary>
/// <param name="sender"></param>
/// <param name="arg"></param>
private void _gpsReader_OnGPSReadStart(object sender, EventArgs arg)
{
lblMessageType.Text = "Mode: " + _gpsReader.ActiveReadMode.ToString();
}
/// <summary>
/// This method is called when the background thread exits the GPS Read loop
/// It is not required that your code handle this event. It simply provides a notification
/// that the read loop is shutting down. The event fires whether the thread terminated because
/// of a call to StopRead or if an error occured.
/// </summary>
/// <param name="sender"></param>
/// <param name="arg"></param>
private void _gpsReader_OnGPSReadStop(object sender, EventArgs arg)
{
lblMessageType.Text = "Read Stopped";
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -