Моя первая консольная программа на C # работает хорошо, поэтому я перехожу к программе, использующей формы.У меня есть label1, lable2 a button1, и я хочу создать button2.все работает, но не могу понять, как использовать тот же COM-объект в button2 без необходимости определять его снова.
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();
}
}
}
Я получаю сообщение об ошибке "имя scope не существует "в button2_click.CMD был определен в button1_click, поэтому не существует в button2_click, и я могу понять это, но почему не существует область действия, когда она определена в Form1_load и / или даже в main?Я не знаю, как объявить это и сделать его видимым во всех функциях Form1, не выпуская и не переопределяя его в каждой кнопке действия.Есть ли способ сделать это?спасибо