0

我正在尝试创建一个适用于 USB 设备的程序。我遇到的问题是我有一个listbox包含计算机中每个连接的 USB 设备的设备。当您选择一个设备时,我想打开一个新表单,Device_Options它位于它自己的部分类中。现在,当我尝试获取设备的名称时selectedDevice,从Devicesto 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;
        }

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

4

3 回答 3

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();  
于 2013-09-12T09:54:34.637 回答
0

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

然后,您不会将所选值传递给选项表单。传入Devicesas parent 并选择值:

private readonly Devices _parent;

public Device_Options(Devices parent)
{
  InitializeComponent();   
  _parent = parent;
  deviceLabel.Text = _parent.selectedDevice;
}
于 2013-09-12T09:57:59.323 回答
0

似乎一切都如我所料,你确定你理解部分类的概念吗?一旦你这样做new Device_Options().Show()Device_Options将创建一个新的和不同的实例Devices,它当然会selectedDevice设置为空字符串!

例如,将您的Devices实例传递给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();  
于 2013-09-12T09:58:22.073 回答