2013-09-12 3 views
0

Я пытаюсь создать программу, которая работает с USB-устройствами. У меня проблема: у меня есть listbox, который содержит каждое подключенное USB-устройство на компьютере. Когда вы выбираете устройство, я хочу открыть новую форму, Device_Options, которая находится в своем собственном частичном классе. Теперь, когда я пытаюсь получить имя устройства, selectedDevice, от Devices до Device_Options, значение сбрасывается, и я получаю пустую строку. Мой код для двух классов выглядит следующим образом:Частичный класс Windows Form сбрасывает значение при объявлении из другой формы

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; 
     } 

Я посмотрел вокруг все через Интернет, и я нашел подобные вопросы, но для меня ничего не работает. Если кто-то может указать мне в правильном направлении, чтобы получить эту работу, любая помощь будет принята с благодарностью. Спасибо :)

+0

' // значение selectedDevice должно быть передано Device_Options' ... почему? – Bolu

+0

Это я просто пытался оправдать то, что я пытался сделать: P –

ответ

0

Похоже, что все работает, как я ожидал бы, вы уверены, что вы понимаете понятие частичных классов правильно? Как только вы сделаете new Device_Options().Show(), Device_Options создаст новый и другой экземпляр Devices, который, конечно же, имеет selectedDevice, установленный в нуль-строку!

E.g. передать свой Devices экземпляр в конструктор Device_Options «s:

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(); 
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(); 
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; 
}