none
[c#] 서로 다른 멤버 간 데이터 공유 방법 RRS feed

  • 질문

  • 두 xml파일을 불러와서 두 xml 파일의 데이터를 출력시켜 다른 부분을 쉽게 볼 수 있도록 하는 프로그램을 짜고 있는데요..

    아래 코드와 같이 두 파일을 불러오고 버튼3을 누르면 두 파일 모두 불러왔으면

    새로운 윈도우 폼을 띄워 xml 비교창을 띄우고

    두 파일중 하나라도 로드되지 않았으면 두개 파일 모두 선택하지 않았다고 메세지를 띄우려고 하는데요...

    버튼을 눌렀을 시 데이터를 불러왔는지 확인하는 부분에서

    다른 멤버의 데이터를 사용해야 하는데 어떻게 해야하는지 모르겠습니다..

    도와주세요..ㅠㅠ

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    using System.Xml;
    using System.Xml.Schema;
    namespace MLD_Manager
    {
        public partial class comp2 : Form
        {
            OpenFileDialog ofc1 = new OpenFileDialog();
            OpenFileDialog ofc2 = new OpenFileDialog();
            public comp2()
            {
                InitializeComponent();
            }
            private DataSet ds;
            private void button1_Click(object sender, EventArgs e)
            {
                ofc1.Filter = "Xml 파일(*.xml)|*.xml|모든파일(*.*)|*.*";
                if (ofc1.ShowDialog() == DialogResult.OK)
                {
                    StreamReader re = new StreamReader(ofc1.FileName);
                    textBox1.Text = string.Format("File Path - <{0}>", ofc1.FileName);//파일 경로 출력
                    //textBox1.Text = re.ReadToEnd(); //파일 내용 출력
                    ds = new DataSet();
                    ds.ReadXml(re);
                    re.Close();
                    string s = ds.GetXml();
                }
            }
            private DataSet ds2;
            public void button2_Click(object sender, EventArgs e)
            {
                ofc2.Filter = "Xml 파일(*.xml)|*.xml|모든파일(*.*)|*.*";
                if (ofc2.ShowDialog() == DialogResult.OK)
                {
                    StreamReader re2 = new StreamReader(ofc2.FileName);
                    textBox2.Text = string.Format("File Path - <{0}>", ofc2.FileName);//파일 경로 출력
                    //textBox2.Text = re.ReadToEnd(); //파일 내용 출력
                    ds2 = new DataSet();
                    ds2.ReadXml(re2);
                    re2.Close();
                    string s2 = ds2.GetXml();
                }
            }
            private void button3_Click(object sender, EventArgs e)
            {
                if()
                {
                    
                }
                else
                {
                compare co = new compare();
                co.ShowDialog();
                }
            }
            
        }
    }


    • 편집됨 Byeongha, Kim 2013년 3월 7일 목요일 오전 8:03
    2013년 3월 7일 목요일 오전 4:36

답변

  • 안녕하세요.  질문하신거에 대한 답변인지는 헷갈리는데요.. ^^

    생성 된 개체에 값을 전달하는 방법은 여러가지가 있습니다.

    생성자를 통해 전달, 프로퍼티를 통해 전달 등..

    아래는 프로퍼티를 통해 전달하는 예제 입니다.

    XML 로드 체크하는 방법도 다양하지만 현소스 위주로 적었습니다.

    private void button3_Click(object sender, EventArgs e)
    {
                //두 파일중 하나라도 로드되지 않았으면 두개 파일 모두 선택하지 않았다고 메세지를 띄우려고 하는데요...
                if (ds == null || ds2 == null)
                {
                    MessageBox.Show("모두 선택되지 않음");
                    return;
                }
    
                //XML 값을 Form2 개체 프로퍼티에 전달
                var frm = new Form2();
                frm.xml1 = ds.GetXml();
                frm.xml2 = ds2.GetXml();
    }
    
    -- 아래는 새로만든 Form2.cs 코드
    public partial class Form2 : Form
    {
        public string xml1 { get; set; }
        public string xml2 { get; set; }
    
        public Form2()
        {
            InitializeComponent();
    
            textBox1.Text = xml1;
            textBox2.Text = xml2;
        }
    }

    • 답변으로 표시됨 Byeongha, Kim 2013년 3월 8일 금요일 오전 7:49
    2013년 3월 7일 목요일 오전 8:20

모든 응답

  • 안녕하세요.  질문하신거에 대한 답변인지는 헷갈리는데요.. ^^

    생성 된 개체에 값을 전달하는 방법은 여러가지가 있습니다.

    생성자를 통해 전달, 프로퍼티를 통해 전달 등..

    아래는 프로퍼티를 통해 전달하는 예제 입니다.

    XML 로드 체크하는 방법도 다양하지만 현소스 위주로 적었습니다.

    private void button3_Click(object sender, EventArgs e)
    {
                //두 파일중 하나라도 로드되지 않았으면 두개 파일 모두 선택하지 않았다고 메세지를 띄우려고 하는데요...
                if (ds == null || ds2 == null)
                {
                    MessageBox.Show("모두 선택되지 않음");
                    return;
                }
    
                //XML 값을 Form2 개체 프로퍼티에 전달
                var frm = new Form2();
                frm.xml1 = ds.GetXml();
                frm.xml2 = ds2.GetXml();
    }
    
    -- 아래는 새로만든 Form2.cs 코드
    public partial class Form2 : Form
    {
        public string xml1 { get; set; }
        public string xml2 { get; set; }
    
        public Form2()
        {
            InitializeComponent();
    
            textBox1.Text = xml1;
            textBox2.Text = xml2;
        }
    }

    • 답변으로 표시됨 Byeongha, Kim 2013년 3월 8일 금요일 오전 7:49
    2013년 3월 7일 목요일 오전 8:20
  • 답변 감사드립니다.

    dataset은 저런 방식으로 해서 넘겼는데..

    혹시 파일 경로 ofc1.FileName 는 어떻게 넘겨서 출력시킬 수 있을까요?ㅠㅠ

    2013년 3월 8일 금요일 오전 12:53
  • OpenFileDialog ofc1 = new OpenFileDialog();
    OpenFileDialog ofc2 = new OpenFileDialog();

    ofc1, ofc2 변수에 of1.FileName 을 이용 또는

    textBox1.Text, textBox2.Text 에 값을 이용하여

    Form2 ofc1, ofc2.FileName 프로퍼티를 추가해서 동일하게 넘기시면 됩니다.

    개체, 프로퍼티, 인수전달 개념 이해하시면 다방면으로 응용 가능하시라 보입니다.


    2013년 3월 8일 금요일 오전 1:30
  • 언어 공부하는게 아니라 사용할 툴을 좀 만들려고 하는거라 아는게 많이 없네요 ㅠㅠ

    자꾸 쉬운거 같은데 질문해서 죄송합니다.

    기존 폼에서

    //XML 값을 Form2 개체 프로퍼티에 전달
                var frm = new compare();
                frm.xml1 = ds.GetXml();
                frm.ofd1 = ofc1.FileName;
                frm.xml2 = ds2.GetXml();
                frm.ofd2 = ofc2.FileName;

    이런식으로 넘기고

    Form2에서

    public partial class compare : Form
        {
            public OpenFileDialog ofd1 = new OpenFileDialog();
            public OpenFileDialog ofd2 = new OpenFileDialog();
            public string xml1 { get; set; }
            public string xml2 { get; set; }
            public compare()
            {
                InitializeComponent();
                textBox2.Text = string.Format("File Path - <{0}>", ofd2.FileName);//파일 경로 출력
            }
        }

    이렇게 했는데 오류떠서요;;

    어떻게 넘기고 어떻게 받아야 할지 모르겠네요 ㅠㅠ

    2013년 3월 8일 금요일 오전 2:18
  • 아래와 같이 하시면 되겠습니다.
    
    public partial class compare : Form
        {
            public string ofd1 {get; set;}
            public string ofd2 {get; set;}
            public string xml1 { get; set; }
            public string xml2 { get; set; }
            public compare()
            {
                InitializeComponent();
                textBox2.Text = string.Format("File Path - <{0}>", ofd2.FileName);//파일 경로 출력
            }
        }

    2013년 3월 8일 금요일 오전 11:28