从另一个表单声明时,Windows窗体部分类重置值

时间:2013-09-12 09:50:47

标签: c# string partial-classes

我正在尝试创建一个适用于USB设备的程序。我遇到的问题是我有listbox包含计算机中每个连接的USB设备。当您选择设备时,我想打开一个新表单Device_Options,它位于自己的分部类中。现在,当我尝试从selectedDeviceDevices获取设备的名称Device_Options时,值会重置,我会得到一个空字符串。我的两个类的代码如下:

Devices
public partial class Devices : Form
{
    public string selectedDevice;
    public Devices()
    {
        InitializeComponent();
    }

    private void Devices_Load(object sender, EventArgs e)
    {

        DriveInfo[] loadedDrives = DriveInfo.GetDrives();

        foreach (DriveInfo ld in loadedDrives)
        {
            if (ld.IsReady == true)
            {
                deviceListBox.Items.Add(ld.Name + "         "+ ld.VolumeLabel + "         "+ ld.DriveFormat);
            }
        }
    }

    private void refreshButton_Click(object sender, EventArgs e)
    {
        this.Close();
        new Devices().Show();
    }

    private void backButton_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    public void deviceSelectButton_Click_1(object sender, EventArgs e)
    {
        string itemSelected = "0";

        if (deviceListBox.SelectedIndex != -1)
        {

            itemSelected = deviceListBox.SelectedItem.ToString();

            deviceListBox.SelectedItem = deviceListBox.FindString(itemSelected);
            selectedDevice = deviceListBox.GetItemText(deviceListBox.SelectedItem).ToString();



//selectedDevice value should be passed to Device_Options

            new Device_Options().Show();  
        }              

       else
        {
            MessageBox.Show("Please Select a Device");
        }
    }
}

然后是我的另一课,Device_Options

 public partial class Device_Options : Form
    {

        Devices devices = new Devices();
        public string deviceSettings;

        public Device_Options()
        {
            InitializeComponent();      
            deviceLabel.Text = devices.selectedDevice;
        }

我浏览了整个网络,我发现了类似的问题,但似乎没有什么对我有用。如果有人能指出我正确的方向来使这项工作,任何帮助将不胜感激。谢谢:))

3 个答案:

答案 0 :(得分:0)

这不是因为部分课程。您必须通过构造函数或属性将所选设备传递给Device_Options类。

public partial class Device_Options : Form
    {

        public Device_Options()
        {
            InitializeComponent();      
            deviceLabel.Text = devices.selectedDevice;
        }

 public Device_Options(Device selectedDevice)
        {
            InitializeComponent();      
            deviceLabel.Text = selectedDevice;
        }
}

在设备上

请致电如下,

new Device_Options(selectedDevice).Show();  

答案 1 :(得分:0)

问题是你实际上没有传递任何价值。 Devices表单的当前实例未在Device_Options表单中使用 - 您正在创建新表单Devices devices = new Devices();类中的Device_Options

然后您没有将所选值传递给选项表单。传递Devices作为父级并选择值:

private readonly Devices _parent;

public Device_Options(Devices parent)
{
  InitializeComponent();   
  _parent = parent;
  deviceLabel.Text = _parent.selectedDevice;
}

答案 2 :(得分:0)

似乎一切都按照我的预期运作,你确定你理解偏分类的概念吗? 只要您执行new Device_Options().Show()Device_Options就会创建一个新的,不同的 Devices实例,当然selectedDevice设置为Devices空串!

E.g。将Device_Options实例传递给public partial class Device_Options : Form { readonly Devices devices; public string deviceSettings; public Device_Options(Devices host) { InitializeComponent(); this.devices = host; deviceLabel.Text = devices.selectedDevice; } 的构造函数:

new Device_Options(this).Show();  

然后致电

{{1}}