0

//Update 修正を追加し、Form1.c コード全体を提供しました。

シンプルにするために、これを少し控えめにしました。これで、すべてのフォーム コントロールが設定されました。この質問のために、DateTimePicker(Short) としての日付、maskedTextBox("###-##") としての従業員番号、単純な textBox としての従業員名、maskedTextBox (標準 SSNum) としての SS 番号など。このすべてのデータを処理するために、次のように Employee_Data というクラスを作成しました...

namespace Employee
{
    public class Employee_Data
    {
        //Make Members Xml elements
        [XmlElement("EmployeeNumber")]
        public String EmployeeNumber {get; set;}
        [XmlElement("Date")]
        public DateTime Date {get; set;}
        [XmlElement("EmployeeName")]
        public String EmployeeName {get; set;}
        [XmlElement("SSNumber")]
        public String SSNumber {get; set;}


    }
}

Form1.cs に e_d というオブジェクトを作成し、VS で自動イベント処理を使用します。デバッガーは、値がクラス オブジェクトに正常に格納されていることを示しています (maskedText 値にはダッシュが含まれています)。ただし、以下に示すようにデータをシリアル化しようとすると、マスクされた textValues が xml ファイルから省略されます...

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;
using System.Xml;

namespace Employee
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Employee_Data e_d = new Employee_Data();

        private void EmployyeeNumber_TextChanged(object sender, EventArgs e)
        {
            e_d.EmployeeNumber=EmployeeNumber.Text;
        }

        private void Date_ValueChanged(object sender, EventArgs e)
        {
            e_d.Date=Date.Value;

        }

        private void EmployeeName_TextChanged(object sender, EventArgs e)
        {
            e_d.EmployeeName=EmployeeName.Text;
        }



        private void SSNumber_ValueChanged(object sender, EventArgs e)
        {
          e_d.SSNumber=SSNumber.Text;
    }


    private void saveButton_Click(object sender, EventArgs e)
    {
        saveFileDialog1.DefaultExt = "xml";
        saveFileDialog1.Filter = "XML File (.xml)|*.xml";
        saveFileDialog1.AddExtension = true;
        saveFileDialog1.RestoreDirectory = true;
        saveFileDialog1.ShowDialog();
    }


private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    string name = saveFileDialog1.FileName;


    using (TextWriter texWrt =  new StreamWriter(saveFileDialog1.FileName))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Employee_Data));
        serializer.Serialize(texWrt, e_d);
    }
}

私はこの問題を調査しましたが、この特定の主題についてはあまりないようです。

4

1 に答える 1

0

答えは、イベント処理、または PROGRAMMER FAILURE でした。プログラマーがテキスト入力のイベント処理を手作業でコーディングしたとき (VS のデフォルトは MaskInputRejected であるため)、イベント ハンドラーを設定するのを忘れていました。皆さん、この件についてプログラマーと必ず話し合います。しかし、彼はその過程で csharp と xml について多くのことを学びました。時間を割いて助けてくれたすべての人に感謝します。

于 2013-03-06T21:49:19.063 に答える