Files
usb-6009/NI-VISA/Examples/.NET/FindResources/MainForm.cs
2024-11-01 11:47:29 -07:00

343 lines
14 KiB
C#

//==================================================================================================
//
// Title : MainForm.cs
// Purpose : This application shows the user how to use ResourceManager to
// find all of the available resources on their system. In the example,
// they can select between several filters to narrow the list. Public
// property ResourceName contains the resource name selected in tvwResourceTree
//
//==================================================================================================
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Ivi.Visa;
using NationalInstruments.Visa;
namespace NationalInstruments.Examples.FindResources
{
/// <summary>
/// This application shows the user how to use ResourceManager to
/// find all of the available resources on their system. In the
/// example, they can select between several filters to narrow the
/// list.
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
private TreeNode ndGpib;
private TreeNode ndVxi;
private TreeNode ndSerial;
private TreeNode ndPxi;
private TreeNode ndTcpip;
private TreeNode ndUSB;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private string filter;
private System.Windows.Forms.Button useCustomStringButton;
private System.Windows.Forms.Label filterStringLabel;
private System.Windows.Forms.Button findResourcesButton;
private System.Windows.Forms.Button clearButton;
private System.Windows.Forms.Label availableResourcesLabel;
private System.Windows.Forms.ListBox filterStringsListBox;
private System.Windows.Forms.TreeView resourceTreeView;
public MainForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
ndGpib = new TreeNode("GPIB");
ndVxi = new TreeNode("VXI");
ndSerial = new TreeNode("Serial");
ndPxi = new TreeNode("PXI");
ndTcpip = new TreeNode("TCP/IP");
ndUSB = new TreeNode("USB");
CleanResourceNodes();
PopulateFilterList();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.availableResourcesLabel = new System.Windows.Forms.Label();
this.resourceTreeView = new System.Windows.Forms.TreeView();
this.findResourcesButton = new System.Windows.Forms.Button();
this.filterStringsListBox = new System.Windows.Forms.ListBox();
this.filterStringLabel = new System.Windows.Forms.Label();
this.clearButton = new System.Windows.Forms.Button();
this.useCustomStringButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// availableResourcesLabel
//
this.availableResourcesLabel.Location = new System.Drawing.Point(16, 213);
this.availableResourcesLabel.Name = "availableResourcesLabel";
this.availableResourcesLabel.Size = new System.Drawing.Size(152, 16);
this.availableResourcesLabel.TabIndex = 0;
this.availableResourcesLabel.Text = "Available Resources Found:";
//
// resourceTreeView
//
this.resourceTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.resourceTreeView.Location = new System.Drawing.Point(16, 232);
this.resourceTreeView.Name = "resourceTreeView";
this.resourceTreeView.Size = new System.Drawing.Size(248, 136);
this.resourceTreeView.TabIndex = 5;
//
// findResourcesButton
//
this.findResourcesButton.Location = new System.Drawing.Point(16, 168);
this.findResourcesButton.Name = "findResourcesButton";
this.findResourcesButton.Size = new System.Drawing.Size(130, 23);
this.findResourcesButton.TabIndex = 8;
this.findResourcesButton.Text = "Find Resources";
this.findResourcesButton.Click += new System.EventHandler(this.findResourcesButton_Click);
//
// filterStringsListBox
//
this.filterStringsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.filterStringsListBox.Location = new System.Drawing.Point(16, 40);
this.filterStringsListBox.Name = "filterStringsListBox";
this.filterStringsListBox.Size = new System.Drawing.Size(248, 121);
this.filterStringsListBox.TabIndex = 9;
//
// filterStringLabel
//
this.filterStringLabel.Location = new System.Drawing.Point(16, 24);
this.filterStringLabel.Name = "filterStringLabel";
this.filterStringLabel.Size = new System.Drawing.Size(72, 16);
this.filterStringLabel.TabIndex = 10;
this.filterStringLabel.Text = "Filter String:";
//
// clearButton
//
this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.clearButton.Location = new System.Drawing.Point(152, 168);
this.clearButton.Name = "clearButton";
this.clearButton.Size = new System.Drawing.Size(112, 24);
this.clearButton.TabIndex = 11;
this.clearButton.Text = "Clear";
this.clearButton.Click += new System.EventHandler(this.clearButton_Click);
//
// useCustomStringButton
//
this.useCustomStringButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.useCustomStringButton.Location = new System.Drawing.Point(152, 8);
this.useCustomStringButton.Name = "useCustomStringButton";
this.useCustomStringButton.Size = new System.Drawing.Size(112, 24);
this.useCustomStringButton.TabIndex = 12;
this.useCustomStringButton.Text = "Use Custom String";
this.useCustomStringButton.Click += new System.EventHandler(this.useCustomStringButton_Click);
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(280, 373);
this.Controls.Add(this.useCustomStringButton);
this.Controls.Add(this.clearButton);
this.Controls.Add(this.filterStringLabel);
this.Controls.Add(this.filterStringsListBox);
this.Controls.Add(this.findResourcesButton);
this.Controls.Add(this.resourceTreeView);
this.Controls.Add(this.availableResourcesLabel);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimumSize = new System.Drawing.Size(288, 400);
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Available Resouces List";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new MainForm());
}
private void PopulateFilterList()
{
filterStringsListBox.Items.Clear();
filterStringsListBox.Items.Add("?*");
filterStringsListBox.Items.Add("ASRL?*INSTR");
filterStringsListBox.Items.Add("GPIB?*");
filterStringsListBox.Items.Add("GPIB?*INSTR");
filterStringsListBox.Items.Add("GPIB?*INTFC");
filterStringsListBox.Items.Add("PXI?*");
filterStringsListBox.Items.Add("PXI?*BACKPLANE");
filterStringsListBox.Items.Add("PXI?*INSTR");
filterStringsListBox.Items.Add("TCPIP?*");
filterStringsListBox.Items.Add("TCPIP?*INSTR");
filterStringsListBox.Items.Add("TCPIP?*SOCKET");
filterStringsListBox.Items.Add("USB?*");
filterStringsListBox.Items.Add("USB?*INSTR");
filterStringsListBox.Items.Add("USB?*RAW");
filterStringsListBox.Items.Add("VXI?*");
filterStringsListBox.Items.Add("VXI?*BACKPLANE");
filterStringsListBox.Items.Add("VXI?*INSTR");
filterStringsListBox.SelectedIndex = 0;
}
private void AddToResourceTree()
{
if (ndGpib.Nodes.Count != 0)
resourceTreeView.Nodes.Add(ndGpib);
if (ndVxi.Nodes.Count != 0)
resourceTreeView.Nodes.Add(ndVxi);
if (ndSerial.Nodes.Count != 0)
resourceTreeView.Nodes.Add(ndSerial);
if (ndPxi.Nodes.Count != 0)
resourceTreeView.Nodes.Add(ndPxi);
if (ndTcpip.Nodes.Count != 0)
resourceTreeView.Nodes.Add(ndTcpip);
if (ndUSB.Nodes.Count != 0)
resourceTreeView.Nodes.Add(ndUSB);
}
private void AddToResourceNode(string resourceName, HardwareInterfaceType intType)
{
switch (intType)
{
case HardwareInterfaceType.Gpib:
ndGpib.Nodes.Add(new TreeNode(resourceName));
break;
case HardwareInterfaceType.Vxi:
ndVxi.Nodes.Add(new TreeNode(resourceName));
break;
case HardwareInterfaceType.Serial:
ndSerial.Nodes.Add(new TreeNode(resourceName));
break;
case HardwareInterfaceType.Pxi:
ndPxi.Nodes.Add(new TreeNode(resourceName));
break;
case HardwareInterfaceType.Tcp:
ndTcpip.Nodes.Add(new TreeNode(resourceName));
break;
case HardwareInterfaceType.Usb:
ndUSB.Nodes.Add(new TreeNode(resourceName));
break;
default:
break;
}
}
private void FindResources()
{
// This example uses an instance of the NationalInstruments.Visa.ResourceManager class to find resources on the system.
// Alternatively, static methods provided by the Ivi.Visa.ResourceManager class may be used when an application
// requires additional VISA .NET implementations.
using (var rm = new ResourceManager())
{
try
{
IEnumerable<string> resources = rm.Find(filter);
foreach (string s in resources)
{
ParseResult parseResult = rm.Parse(s);
AddToResourceNode(s, parseResult.InterfaceType);
}
AddToResourceTree();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void CleanResourceNodes()
{
ndGpib.Nodes.Clear();
ndVxi.Nodes.Clear();
ndSerial.Nodes.Clear();
ndPxi.Nodes.Clear();
ndTcpip.Nodes.Clear();
ndUSB.Nodes.Clear();
}
private void findResourcesButton_Click(object sender, System.EventArgs e)
{
filter = filterStringsListBox.Text;
DisplayResources();
}
private string getCustomFilter()
{
CustomFilterForm cff = new CustomFilterForm();
cff.ShowDialog();
return cff.CustomFilter;
}
private void clearButton_Click(object sender, System.EventArgs e)
{
resourceTreeView.Nodes.Clear();
CleanResourceNodes();
}
private void useCustomStringButton_Click(object sender, System.EventArgs e)
{
filter = getCustomFilter();
DisplayResources();
}
private void DisplayResources()
{
resourceTreeView.Nodes.Clear();
CleanResourceNodes();
FindResources();
resourceTreeView.ExpandAll();
}
public string ResourceName
{
get
{
try
{
return resourceTreeView.SelectedNode.Text;
}
catch (Exception)
{
return "";
}
}
}
}
}