我的第一个 C# 控制台程序运行良好,因此我现在转向使用 Forms 的程序。我有一个label1,lable2有一个button1,我想创建一个button2。一切正常,但无法弄清楚如何在 button2 中使用相同的 COM 对象而无需再次定义它。
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dynamic scope = Activator.CreateInstance(Type.GetTypeFromProgID("LeCroy.XStreamDSO"));
}
public void label1_Click(object sender, EventArgs e)
{
}
public void button1_Click(object sender, EventArgs e)
{
label2.Text = "reading back instrument ID";
button1.Text = " 2s pause between successives commands...";
dynamic scope = Activator.CreateInstance(Type.GetTypeFromProgID("LeCroy.XStreamDSO"));
dynamic Replay = scope.InstrumentID;
var Replayvalue = Replay.Value;
var Replaytype = Replay.type;
label1.Text = "You are connected to scope model:" + Replayvalue;
label2.Text = "Going to recall default setup";
dynamic CMD = scope.SaveRecall.Setup.DoRecallDefaultPanel.ActNow();
System.Threading.Thread.Sleep(2000);
label2.Text = " all Done!";
System.Threading.Thread.Sleep(200);
label2.Text += "\nTrigger mode Auto";
CMD = scope.Acquisition.TriggerMode = "Auto";
System.Threading.Thread.Sleep(2000);
label2.Text += "\nShow measurements ";
CMD = scope.Measure.ShowMeasure = true; // turn measure panel on
System.Threading.Thread.Sleep(2000);
label2.Text += "\nHorizontal scale up";
CMD = scope.Acquisition.Horizontal.HorScaleUp.ActNow;
System.Threading.Thread.Sleep(2000);
label2.Text += "\nHorizontal scale up one more time..";
CMD = scope.Acquisition.Horizontal.HorScaleUp.ActNow;
System.Threading.Thread.Sleep(2000);
label2.Text += "\nShow measurements statistics";
scope.Measure.StatsOn = true;
System.Threading.Thread.Sleep(2000);
label2.Text += "\nTrigger mode Single";
scope.Acquisition.TriggerMode = "Single"; //set single trigger mode
System.Threading.Thread.Sleep(2000);
label2.Text += "\nclear all sweeps";
CMD = scope.Measure.ClearSweeps; //clear sweeps in messurements
System.Threading.Thread.Sleep(2000);
label2.Text += "\nTrigger mode Single...again";
scope.Acquisition.TriggerMode = "Single"; //set single trigger mode
System.Threading.Thread.Sleep(2000);
label2.Text = "\nall commands executed!";
button1.Text = "click here to redo all...";
}
public void Form1_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
dynamic CMD = scope.SaveRecall.Setup.DoRecallDefaultPanel.ActNow();
}
}
}
我在button2_click 中收到错误“名称 scope 不存在”。 CMD 是在button1_click 中定义的,因此在button2_click 中不存在,我可以理解这一点,但是为什么在Form1_load 和/或什至在main 中定义时范围不存在?我不知道如何声明它并使其在 Form1 的所有功能中可见,而不必在每个操作按钮中释放并重新定义它。有没有办法做到这一点? 谢谢
您可以将其移至更高的范围,即在您的类声明下方并将其保留为空(null),然后您可以使用按钮2访问它,但它始终为空,直到您首先使用按钮1分配它。
解决了在加载的第一个表单中声明变量的问题。