2012-05-06 23 views
0

我有一個窗體窗體,保存/加載XML文件,並詢問用戶他們想要保存/加載它的位置。我的問題是我不知道如何改變這種方法加載文件從用戶想要的地方,而不是streamreader指定的地方。Windows窗體XML服務調用加載對話框

下面的代碼是我的按鈕和LoadValues方法。

private void Edittask_loadbuttonClick(
    object sender, EventArgs e) 
{ 
    Stream myStream = null; 
    var sFile1 = new OpenFileDialog(); 

    sFile1.InitialDirectory = "c:\\"; 
    sFile1.Filter = "xml files (*.xml)|*.xml"; 
    sFile1.FilterIndex = 2; 
    sFile1.RestoreDirectory = true; 

    if (sFile1.ShowDialog() == DialogResult.OK) 
    { 
     try 
     { 
      if ((myStream = sFile1.OpenFile()) != null) 
      { 
       using (myStream) 
       { 
        var v = LoadValues(); 
        this.load_task1_name.Text = 
         v.task1_name; 
        this.load_task1_desc.Text = 
         v.task1_desc; 
        this.load_task1_date.Value = 
         v.task1_date; 
        this.load_checkbox.Checked = 
         v.task1_checkbox; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(
       "Error: Could not read file from disk. Original error: " + 
       ex.Message); 
     } 
    } 
} 

public Values LoadValues() 
{ 
    var serializer = new XmlSerializer(typeof (Values)); 
    using (
     TextReader textReader = new StreamReader(
            "E:\\hello.xml") 
    ) 
    { 
     return 
      (Values) serializer.Deserialize(textReader); 
    } 
} 

回答

1

我會通過從打開文件對話框到LoadValues的流(...),並用它來構建你的StreamReader:

public Values LoadValues(Stream stream) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(Values)); 
    using (TextReader textReader = new StreamReader(stream)) 
    { 
     return (Values)serializer.Deserialize(textReader); 
    } 
} 

if ((myStream = sFile1.OpenFile()) != null) 
{ 
    using (myStream) 
    { 
     Values v = LoadValues(myStream); 
     ... 
    } 
} 
+1

真棒!找到了工作夥伴:D謝謝! –

+0

很高興我能幫到你。如果答案能夠解決您的問題,那麼將其標記爲已回答將有所幫助,並且回答者會獲得一些聲望點。 – TheEvilPenguin

0

您需要將Stream作爲參數傳遞給您的函數。

相關問題