【发布时间】:2018-06-19 21:53:12
【问题描述】:
我有一个表单,其中填充了从主表单创建的 userControls 数组。一旦按下按钮时弹出窗口关闭,我需要能够从主窗体访问这个 userControls 数组。如果我填写表格,然后按下主窗体上的按钮而不关闭弹出窗口,则值存在。但是,如果我关闭弹出窗口,则这些值不存在。我的主要形式是静态的,所以我可以在其他形式中使用它的变量。
弹窗代码:
public ScanChannel[] controls;
public ScanListSetup()
{
InitializeComponent();
int numChans = Convert.ToInt32(Form1.Self.numChannels.Text);
controls = new ScanChannel[numChans];
// Create the UserControls
for(int i = 0; i < numChans; i++)
{
controls[i] = new ScanChannel();
}
// Place them
for (int i = 0; i < numChans; i++)
{
controls[i].Location = new Point(13,(35+25*(i)));
this.Controls.Add(controls[i]);
}
doneButton.Location = new Point(82, 35 + (25 * (numChans + 1)));
this.Size =new Size(280, 110 + (25 * (numChans + 1)));
}
private void doneButton_Click(object sender, EventArgs e)
{
Form1.Self.setChannelsToScan(controls);
}
我需要访问主窗体中的controls 数组。主窗体代码如下:
private ScanChannel[] channelsToScan;
private void configureScanListButton_Click(object sender, EventArgs e)
{
var form = new ScanListSetup();
form.Show(this);
scanListConfigured = true;
this.channelsToScan = new ScanChannel[Convert.ToInt32(numChannels.Text)];
}
public void setChannelsToScan(ScanChannel[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
this.channelsToScan[i] = arr[i];
}
}
private void scanButton_Click(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("Test: " + this.channelsToScan[0].getDeviceType());
// THIS PRINTS AN EMPTY STRING
}
因此,如果我在弹出表单仍处于打开状态时单击scanButton,则调试 writeLine 会输出正确的值。但是,如果我在单击弹出表单上的 doneButton 后关闭表单,则 Debug writeLine 会输出 Test: 而没有其他内容。
对此的任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: c# .net winforms user-controls