📄 form1.cs
字号:
// Read settings into memory
for (int i = 0; i < displayUnits.Length; i++)
{
displayUnits[i] = new DisplayUnit();
DisplayUnit du = displayUnits[i];
XmlNode duNode = nodeList[i];
node = duNode.SelectSingleNode("./@name");
du.sName = node.InnerText;
cboDisplayUnits.Items.Add(du.sName); // Add name to combo box
node = duNode.SelectSingleNode("./@enabled");
du.bEnabled = (node.InnerText == "1") ? true : false;
// Read current counter settings
node = duNode.SelectSingleNode("CurrentCounter/CategoryName");
du.sCatName = node.InnerText;
node = duNode.SelectSingleNode("CurrentCounter/InstanceName");
du.sInstName = node.InnerText;
node = duNode.SelectSingleNode("CurrentCounter/CounterName");
du.sCntName = node.InnerText;
// Init counter data
du.pc = null;
du.dblSampleValue = 0.0;
du.nDisplayValue = 0;
// Load other parameters
if (duNode.Name == "Bar")
{
BarParams barParams = new BarParams();
du.parameters = barParams;
node = duNode.SelectSingleNode("Parameters/Size");
barParams.nSize = Int32.Parse(node.InnerText);
node = duNode.SelectSingleNode("Parameters/DataPos");
barParams.nBytePtr = Int32.Parse(node.InnerText);
node = duNode.SelectSingleNode("Parameters/MinValue");
barParams.nMinValue = Int32.Parse(node.InnerText);
node = duNode.SelectSingleNode("Parameters/MaxValue");
barParams.nMaxValue = Int32.Parse(node.InnerText);
node = duNode.SelectSingleNode("Parameters/Logarithmic");
barParams.bLogarithmic = (node.InnerText == "1") ? true : false;
}
else // duNode.Name == "Dot"
{
DotParams dotParams = new DotParams();
du.parameters = dotParams;
node = duNode.SelectSingleNode("Parameters/Operator");
dotParams.sOperator = node.InnerText;
node = duNode.SelectSingleNode("Parameters/DataPos");
string sDataPos = node.InnerText;
dotParams.nBytePtr = Int32.Parse(sDataPos.Substring(0, sDataPos.IndexOf('.')));
dotParams.nBitPtr = Int32.Parse(sDataPos.Substring(sDataPos.IndexOf('.') + 1));
node = duNode.SelectSingleNode("Parameters/Threshold");
dotParams.dblThreshold = Double.Parse(node.InnerText);
}
}
// Allocate memory for the data packet
node = xmlProfile.SelectSingleNode("HyperBarServer/DisplayUnits/@dataSize");
int nPacketSize = Int32.Parse(node.InnerText) + 2; // Including header and tail bytes
packet = new byte[nPacketSize];
// Load other misc. parameters
// Tip: "1" represents "true"
//
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/HideOnStartup");
chkHideOnStart.Checked = (node.InnerText == "1") ? true : false;
if (chkHideOnStart.Checked)
{
notifyIcon1.Visible = true;
}
else
{
this.Show();
}
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/StartupWithSystem");
chkStartWithSys.Checked = (node.InnerText == "1") ? true : false;
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/AutoStartSamplingDelay");
txtStartDelay.Text = node.InnerText;
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/AutoStartSampling");
chkAutoStartSampling.Checked = (node.InnerText == "1") ? true : false;
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/ValidateCountersInterval");
txtValidateInterval.Text = node.InnerText;
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/ValidateCounters");
chkValidateCounters.Checked = (node.InnerText == "1") ? true : false;
// Auto start sampling after a specified time delay
if (chkAutoStartSampling.Checked)
{
int nDelaySecond = Int32.Parse(txtStartDelay.Text);
if (nDelaySecond <= 0)
{
// Start sampling with the program startup without delay
tbbRun.Pushed = true;
OnToolButtonRun();
}
else
{
tmrDelay.Interval = 1000 * nDelaySecond;
tmrDelay.Enabled = true;
}
}
}
private void SaveStartupRegEntry(bool clear)
{
// Writing to windows registry
string sRegPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
RegistryKey key = Registry.LocalMachine.OpenSubKey(sRegPath, true);
if (clear)
{
key.DeleteValue("HyperBarServer", false);
}
else
{
// The program will be automatically started with the system startup
key.SetValue("HyperBarServer", Application.ExecutablePath);
}
}
private void SaveConfig()
{
XmlNode node = null;
XmlNodeList nodeList = null;
// Save default baudrate
//
node = xmlProfile.SelectSingleNode("HyperBarServer/BaudrateSettings/Default");
if (cboBaudrates.SelectedIndex == -1) throw new Exception("请选择通信波特率!");
node.InnerText = cboBaudrates.SelectedItem.ToString();
// Save default sample interval
//
node = xmlProfile.SelectSingleNode("HyperBarServer/SampleIntervalSettings/Default");
if (cboSampleIntervals.SelectedIndex == -1) throw new Exception("请选择采样间隔!");
node.InnerText = cboSampleIntervals.SelectedItem.ToString();
// Save default refresh interval
//
//node = xmlProfile.SelectSingleNode("HyperBarServer/RefreshIntervalSettings/Default");
//if (cboRefreshIntervals.SelectedIndex == -1) throw new Exception("请选择刷新间隔!");
//node.InnerText = cboRefreshIntervals.SelectedItem.ToString();
// Save info for all the display units
//
nodeList = xmlProfile.SelectNodes("HyperBarServer/DisplayUnits/*");
for (int i = 0; i < nodeList.Count; i++)
{
DisplayUnit du = displayUnits[i];
XmlNode duNode = nodeList[i];
node = duNode.SelectSingleNode("./@enabled");
node.InnerText = du.bEnabled ? "1" : "0";
// Save current counter settings
node = duNode.SelectSingleNode("CurrentCounter/CategoryName");
node.InnerText = du.sCatName;
node = duNode.SelectSingleNode("CurrentCounter/InstanceName");
node.InnerText = du.sInstName;
node = duNode.SelectSingleNode("CurrentCounter/CounterName");
node.InnerText = du.sCntName;
// Save other parameters
if (duNode.Name == "Bar")
{
BarParams barParams = (BarParams)du.parameters;
node = duNode.SelectSingleNode("Parameters/MinValue");
node.InnerText = barParams.nMinValue.ToString();
node = duNode.SelectSingleNode("Parameters/MaxValue");
node.InnerText = barParams.nMaxValue.ToString();
node = duNode.SelectSingleNode("Parameters/Logarithmic");
node.InnerText = barParams.bLogarithmic ? "1" : "0";
}
else // duNode.Name == "Dot"
{
DotParams dotParams = (DotParams)du.parameters;
node = duNode.SelectSingleNode("Parameters/Operator");
node.InnerText = dotParams.sOperator;
node = duNode.SelectSingleNode("Parameters/Threshold");
node.InnerText = dotParams.dblThreshold.ToString("0.0");
}
}
// Save other misc. parameters
//
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/HideOnStartup");
node.InnerText = chkHideOnStart.Checked ? "1" : "0";
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/StartupWithSystem");
node.InnerText = chkStartWithSys.Checked ? "1" : "0";
SaveStartupRegEntry(!chkStartWithSys.Checked); // Save to windows registry
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/AutoStartSamplingDelay");
node.InnerText = txtStartDelay.Text;
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/AutoStartSampling");
node.InnerText = chkAutoStartSampling.Checked ? "1" : "0";
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/ValidateCountersInterval");
node.InnerText = txtValidateInterval.Text;
node = xmlProfile.SelectSingleNode("HyperBarServer/MiscSettings/ValidateCounters");
node.InnerText = chkValidateCounters.Checked ? "1" : "0";
// Write to disk
xmlProfile.Save(PROFILE_NAME);
}
private void chkAutoStartSampling_CheckedChanged(object sender, System.EventArgs e)
{
lblStartDelay.Enabled = chkAutoStartSampling.Checked;
txtStartDelay.Enabled = chkAutoStartSampling.Checked;
lblSecond1.Enabled = chkAutoStartSampling.Checked;
}
private void chkValidateCounters_CheckedChanged(object sender, System.EventArgs e)
{
lblValidateInterval.Enabled = chkValidateCounters.Checked;
txtValidateInterval.Enabled = chkValidateCounters.Checked;
lblSecond2.Enabled = chkValidateCounters.Checked;
}
private void cboDisplayUnits_SelectedIndexChanged(object sender, System.EventArgs e)
{
chkDisplayUnitEnabled.Enabled = true;
int index = cboDisplayUnits.SelectedIndex;
DisplayUnit du = displayUnits[index];
// Load settings from memory
//
chkDisplayUnitEnabled.Checked = du.bEnabled;
lblCurrentCounter.Text = BuildCounterString(du.sCatName, du.sInstName, du.sCntName);
// Check for other parameters
if (du.parameters is BarParams)
{
// It is a bar unit
BarParams barParams = (BarParams)du.parameters;
txtMinValue.Text = barParams.nMinValue.ToString();
txtMaxValue.Text = barParams.nMaxValue.ToString();
chkLogarithmic.Checked = barParams.bLogarithmic;
lblMinValue.Visible = true;
txtMinValue.Visible = true;
lblMaxValue.Visible = true;
txtMaxValue.Visible = true;
chkLogarithmic.Visible = true;
lblOperator.Visible = false;
cboOperators.Visible = false;
lblThreshold.Visible = false;
txtThreshold.Visible = false;
}
else // du.parameters is DotParams
{
// It is a dot unit
DotParams dotParams = (DotParams)du.parameters;
cboOperators.SelectedIndex = cboOperators.FindString(dotParams.sOperator);
txtThreshold.Text = dotParams.dblThreshold.ToString("0.0");
lblMinValue.Visible = false;
txtMinValue.Visible = false;
lblMaxValue.Visible = false;
txtMaxValue.Visible = false;
chkLogarithmic.Visible = false;
lblOperator.Visible = true;
cboOperators.Visible = true;
lblThreshold.Visible = true;
txtThreshold.Visible = true;
}
}
private void chkDisplayUnitEnabled_CheckedChanged(object sender, System.EventArgs e)
{
lblCurrentCounter1.Enabled = chkDisplayUnitEnabled.Checked;
lblCurrentCounter.Enabled = chkDisplayUnitEnabled.Checked;
btnModifyCounter.Enabled = chkDisplayUnitEnabled.Checked;
lblMinValue.Enabled = chkDisplayUnitEnabled.Checked;
txtMinValue.Enabled = chkDisplayUnitEnabled.Checked;
lblMaxValue.Enabled = chkDisplayUnitEnabled.Checked;
txtMaxValue.Enabled = chkDisplayUnitEnabled.Checked;
chkLogarithmic.Enabled = chkDisplayUnitEnabled.Checked;
lblOperator.Enabled = chkDisplayUnitEnabled.Checked;
cboOperators.Enabled = chkDisplayUnitEnabled.Checked;
lblThreshold.Enabled = chkDisplayUnitEnabled.Checked;
txtThreshold.Enabled = chkDisplayUnitEnabled.Checked;
int index = cboDisplayUnits.SelectedIndex;
displayUnits[index].bEnabled = chkDisplayUnitEnabled.Checked; // Save to memory
}
private void tbMain_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
// Clicking on the toolbar button would not cause Validating event
// to be triggered on the previously focused control.
// So by programmatically setting focus on the toolbar control first and
// that event could be successfully triggered right after this Focus() call.
// But in fact, a toolbar control can not gain focus.
tbMain.Focus();
if (bValidationError)
{
if (tbbRun == e.Button)
{
// Restore push state of the button
tbbRun.Pushed = !tbbRun.Pushed;
}
// Validation error, do nothing
return;
}
// Dispatch
if (tbbSave == e.Button)
{
OnToolButtonSave();
}
else if (tbbRun == e.Button)
{
OnToolButtonRun();
}
else if (tbbAbout == e.Button)
{
OnToolButtonAbout();
}
else if (tbbHelp == e.Button)
{
OnToolButtonHelp();
}
else if (tbbHide == e.Button)
{
OnToolButtonHide();
}
else if (tbbExit == e.Button)
{
OnToolButtonExit();
}
else
{
// Not defined
}
}
private void OnToolButtonSave()
{
try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -