2016-08-25 2 views
0

私はこのプログラムがやりたいことは、別のプログラムによって書き込まれた名前のリストを持つExcelファイルを読み込み、それをチェックリストボックスにインポートすることです。このプログラムでは、ユーザーが名前を選択できるようにし、開始ボタンをクリックすると新しいフォームページに移動し、LabelBoxの上部に名前を表示します(これは、LabelBoxが返すもの"System.WindowsForms.CheckedListBox.CheckedItemCollection ...."(私は、新しいフォームページがそれを読むことができるように、名前をXMLファイルに書き込ませることによってこれをやっています。私が持っている:Excelファイルから情報を取得しているCheckListBoxのチェック項目の文字列値を取得する方法は?

FORM1:

NameListBox.CheckOnClick = true; 
     NameListBox.Name = "NameListBox"; 
     NameListBox.TabIndex = 1; 
     NameListBox.SelectionMode = SelectionMode.One; 
     NameListBox.ThreeDCheckBoxes = true; 
     NameListBox.DisplayMember = "Name"; 
     NameListBox.Items.Add(ExcelSheet.Cells[2, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[3, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[4, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[5, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[6, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[7, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[8, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[9, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[10, 1].text); 
     NameListBox.Items.Add(ExcelSheet.Cells[11, 1].text); 
     Controls.Add(NameListBox); 

     object itemChecked = NameListBox.CheckedItems; 

     string SName = itemChecked.ToString(); 

     try 
     { 
      Data info = new Data(); 
      info.Name1 = SName; 
      Login.SaveName.SaveNameData(info, "Name.xml"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

     //Form2.StartUp.StudentLabelName(StudentName); 
     //StudentName = Form2.NameLabel.Text; 




    } 

    public class SaveName 
    { 
     public static void SaveNameData(object obj, string filename) 
     { 
      XmlSerializer sr = new XmlSerializer(obj.GetType()); 
      TextWriter writer = new StreamWriter(filename); 
      sr.Serialize(writer, obj); 
      writer.Close(); 
     } 
    } 

    public class Data 
    { 
     private string name1; 

     public string Name1 
     { 
      get { return name1; } 
      set { name1 = value; } 
     } 
    } 

FORM2:

public void StudentNames() 
    { 
     if (File.Exists("Name.xml")) 
     { 
      XmlSerializer xs = new XmlSerializer(typeof(Login.Data)); 
      FileStream read = new FileStream("Name.xml", FileMode.Open, FileAccess.Read, FileShare.Read); 
      Login.Data info = (Login.Data)xs.Deserialize(read); 
      NameLabel.Text = info.Name1; 
     } 
    } 

ありがとうございます。

+0

「データ」はどのようなオブジェクトタイプですか? –

+0

NameListBox.CheckedItemsは複数のアイテム、つまりコレクションです.1つのエントリだけを試したい場合:NameListBox.CheckedItems.First – Master117

答えて

0

CheckedListBox.CheckedItemは、チェックされるオブジェクトの配列を返します。 CheckItems配列をループします。ループ外で読むためにSNamesをリストに入れることができます。

var SNames = new List<string>(); 
foreach (var c in NameListBox.CheckedItems) 
{ 
    SNames.Add(c.ToString()); 
} 
+0

これはいいですが、どのようにしてforeachループからSNameを取り出すのですか? – pcconfuser

+0

ループ外で値を読み取れるように答えを更新しました。 –

関連する問題