2017-03-08 148 views
0

我一直在为这个管理应用程序工作数周,现在已经快完成了。当用户点击保存按钮时应该发生什么,调用VerifyFields()方法。之后,应该询问用户是否要保存并发送电子邮件。一旦用户点击是,它应该发送一封电子邮件到XML文件中的电子邮件地址。我收到错误消息“文件:DREmailAddresses.xml未找到:\ fs01 \ Applications \ EMS-Manager。”但是,该文件在那里并且可以访问。我已经复制了下面的相关代码以及image of the error.通过网络访问XML文件

// Begin Email Section 
    public bool VerifyFields() 
    { 
     var status = false; 
     switch (tbxDynPartNumber.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Dynalab Part#", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxSupplier.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Supplier Name", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxInitiatedBy.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Initiator Name", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (orderQty.Text) 
     { 
      case "0": 
       MessageBox.Show(@"Order Quantity Must Be Greater Than 0!", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 

     switch (dtpDate.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter A Valid Date.", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxDescription.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Description", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 

     switch (tbxLocation.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Location", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxDiscrepancyDescription.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Discrepancy Description", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     return status; 
    } 

    public void PrepareEmail(string subject, string message) 
    { 
     if (MessageBox.Show(@"Are you sure you want to save and send Discrepancy Report: " +tbxDRNumber.Text + @"?\n Click YES to save\n Click NO to cancel" , @"Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
     { 

      SendEmail(subject,message); 
     } 
    } 
    public Array AddEmail() 
    { 
     string[] dRemail = { "", "", "" }; 
     if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml")) 
     { 
      XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"); 
      while (emailDocument.Read()) 
      { 
       var type = emailDocument.NodeType; 
       switch (type) 
       { 
        case XmlNodeType.Element: 
         if (emailDocument.Name == "DRCreatedAddEmail") 
         { 
          dRemail[0] = emailDocument.ReadInnerXml(); 
         } 
         if (emailDocument.Name == "DRActionNeededAddEmail") 
         { 
          dRemail[1] = emailDocument.ReadInnerXml(); 
         } 
         if (emailDocument.Name == "DRPendingAddEmail") 
         { 
          dRemail[2] = emailDocument.ReadInnerXml(); 
         } 
         else 
         { 
          MessageBox.Show(
           @"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager"); 
         } 
         break; 
       } 
      } 
     } 
     return dRemail; 
    } 
+0

不是一个答案,但[文档的XmlTextReader的说(https://msdn.microsoft.com/en-us/library/1af7xa52(V = vs.110).aspx)say _“从.NET Framework 2.0开始,我们建议您使用XmlReader.Create方法创建XmlReader实例,以利用新功能。”_ – stuartd

+0

查看代码, t似乎理解开关语句。所有这些都可以通过简单的陈述来完成。 – LeonG

+0

您对陈述是否正确。修改代码以使用if语句代替switch语句可能很有用。另外,我对编程和学习仍然很陌生。我自学了一切,我犯了错误,这都是学习的一部分。不过,我们下周将在课堂上讲述Switch语句。谢谢您的意见。 – TAdams79

回答

1

如果您收到该错误信息,那么你的代码是越来越近了检查File.Exists和过去的文档的阅读,但只是击中的其他分支的“if(emailDocument.Name = =“DRPendingAddemail”)“检查。

所以,你的功能应该是接近这个

public Array AddEmail() 
{ 
    string[] dRemail = { "", "", "" }; 
    if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml")) 
    { 
     XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"); 
     while (emailDocument.Read()) 
     { 
      var type = emailDocument.NodeType; 
      switch (type) 
      { 
       case XmlNodeType.Element: 
        if (emailDocument.Name == "DRCreatedAddEmail") 
        { 
         dRemail[0] = emailDocument.ReadInnerXml(); 
        } 
        else if (emailDocument.Name == "DRActionNeededAddEmail") 
        { 
         dRemail[1] = emailDocument.ReadInnerXml(); 
        } 
        else if (emailDocument.Name == "DRPendingAddEmail") 
        { 
         dRemail[2] = emailDocument.ReadInnerXml(); 
        } 
        else 
        { 
         MessageBox.Show("Unknown node type " + emailDocument.Name); 
        } 
        break; 
      } 
     } 
    } 
    else 
    { 
     MessageBox.Show(@"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager"); 
    } 
    return dRemail; 
} 
+0

谢谢你。我会尝试你的建议。我甚至没有意识到它正在检查所有这些情况。另外,因为我是新手,所以我如何接受答案? – TAdams79

+0

我已经从switch语句转换为if语句,并且得到了相同的结果。 – TAdams79

+0

确保你有我的例子中的其他语句。如果您知道如何在Visual Studio中使用调试器,请在两个else语句中放置一个断点并查看执行哪一个。需要注意的一件事是,我添加了一个新的代码路径,旧的MessageBox曾用于不同的错误消息,因此请确保您看到正确的消息(“找到文件nout”与“未知节点类型”) –