퇴근5분전


BaseForm은 기본적인 폼 생성에 기초적인 몇가지를 미리 구현해두고 편리하게 사용하도록 만들어둔 Base객체임.

이외에 BaseUserControl도 있고... 등등...

지금은 BaseForm에 간단한 기능몇가지...

JsFW dll모음을 참조추가해주고

BaseForm을 상속 시켜주면

 우선 디자인뷰에서 속성창에 속성이 하나 나온다. 기존에 블로깅한 글에 하나에 있는데 초기 폼 위치결정을
UI로 할수 있도록 해주는 창이다.


처럼 하면 작업표시줄 위에 올라온다.


NotifyICon 사용하기...

public partial class Form1 : BaseForm
    {
        public Form1()
        {
            InitializeComponent();

          this.NotifyIcon = Resources.Icon1;
         this.NotifyIcon_Visible = true;
         this.NotifyIcon_Menu = new ContextMenu();
         this.NotifyIcon_Menu.MenuItems.Add(
                                    new MenuItem("종료하기", delegate { this.Close(); }));
        }
    }

간단히 ICon을 추가해놓고...  위처럼 간단히 넣어주면 된다.



실행결과는 위에 처럼 나온다. Js빨간 아이콘이 NotifyIcon을 적용한것이다. 우측버튼 클릭하면 등록한데로
종료하기가 나타난다.

그이외에도 BaseForm에는 몇가지 추가된 요소가 더있는데 기억이 ㅠㅠ;

컨트롤 추가하고 이 이벤트를 한곳에 모아놓기 위한 이벤트 핸들이라든가... 몇가지 있긴 한데...

아참 메세지 박스...  로그남기는 메서드등...등.. 있긴한데..

메세지 박스...

Alert(); 메서드인데... Alert <-- 웹할때 너무 익숙해져서... 훗!




 그냥 Alert창..



타이머 가동된 Alert    10초후 자동으로 닫힌다.  우측 숫자가 카운트...




        public static bool UsedLogging { get; set; }
        public void Alert(BaseException bEx);
        public virtual void Alert(string Msg);
        public void Alert(ValidationException vEx);
        public virtual void Alert(string Msg, int? ShowDelayTime);
        public virtual void Alert(string Msg, string title);
        public virtual void Alert(string Msg, string title, int? ShowDelayTime);
       
        protected virtual void OnUniButton_Click(object sender, JsFW_ButtonEventArgs e);
       
        protected void ShowDebugWindow(DataBase_Business DataBase, Control _opener);
        protected void ShowDebugWindow(DataBase_Business DataBase, string _opener);


Alert을 보면 예외 관련해서 몇가지 받고, 메세지처리도 하고..

또 ShowDebugWindow 처럼 비지니스 호출하면서 디버그창을 띠울지 말지도 지원이 된다.


 BaseForm : Form, IFadeEffect 를 구현해두어서...

윈7에서는 그닥 효과가 눈에 안띠지만..

기존xp같은경우 FormShow 될때 서서히 나타나고 Close될때 서서히 사라지는 효과도 구현이 되어있다.



OnUniButton_Click 는 Button을 컨트롤로 직접 구현해두고 Click이벤트를 재정의 할수 있도록 가상메서드로 구현해두었다.

UniButton으로 만들어진 UniBtnClick 이벤트에 핸들러로 붙일수 있고
이때 버튼에 특정기능코드를 넣었을때 버튼처리를 분기할수 있도록 해놨기에....

아... 실수로 접근제한자를 잘못 넣어놔서 안보이는 중...

간단히 예제에 대한 처리.. 소스를 살짝쿵... 적어본다.


 protected override void OnUniButton_Click(object sender, JsFW_ButtonEventArgs e)
        {
            base.OnUniButton_Click(sender, e);

            switch (e.Code)
            {
                case Button_Codes.등록: break;
                case Button_Codes.닫기: break;
                case Button_Codes.Special :
                    switch (e.Special)
                    {
                        case Button_Codes_Special.SpecialBtn1: break;
                        case Button_Codes_Special.없다: break;
                    }
                    break;
            }
        }

이런형태로 버튼마다 생성시 해당 기능을 설정해두면 클릭이벤트에 위 메서드로 연결해주면
각 버튼별 처리를 위처럼 분리해서 구현할수 있다.
여기에 비지니스처리등을 각각 맞게 설정가능하다.


필요해서 만들어두었던 객체 하나를 까먹고 있었다. 왜만들어놨지 라는 의문에 쌓였던...

JsFW.Xml.ListMng<T> 라는 기본타입..
제너릭을 이용한 리스트관리였던것...

본래 취지가 기억이 안나는 ㅡ.,ㅡ;;; 그런 객체인데.. 음... Insert, Update, Delete가 protected internal로 되있는거 보면..

새로운 관리 객체로 만들어 사용하도록 만든거였는데 직접 구현해보니... 먼가 빠진듯 한데... 쩝!!


1. 기본 xml클래스 정의

 [JsFW.Xml.XmlRoot_Tag("AA"), JsFW.Xml.XmlElement_Tag("DD")]
    public class AA : JsFW.Xml.JsFWXmlBaseObject
    {
        string _TA = string.Empty;

        [JsFW.Xml.XmlATT_Tag]
        public string TA
        {
            get { return _TA; }
            set { _TA = value; }
        }
    }

2. 리스트로 관리할 객체 재정의 
 public class AAList : JsFW.Xml.ListMng<AA>
    {
        public AAList() : base(@"D:\ttt\","test.xml",  typeof(AA).Name )
        {}

        public void Add(AA a)
        {
            base.Insert(a);
        }
      
        public void Remove(AA a)
        {
            base.Delete(a);
        }

        public override string ToString()
        {
            return base.ToString();
        }
    }



3. 리스트 사용!!
            AAList alst = new AAList();
            alst.Add(new AA() { TA = "OA" });
            alst.Save();


결과

<?xml version="1.0" encoding="utf-8" ?>
- <AA ID_IDENTITY="6">
  <CC _XID="1" TA="A1" />
  <CC _XID="2" TA="up1" />
  <DD _XID="3" TA="A1" />
  <DD _XID="4" TA="A1" />
  <DD _XID="5" TA="A1" />
  <KK />
  <DD _XID="6" TA="OA" />  입력 잘되었다!!  
  </AA>





* 참고 :  JsFW.Xml.XmlElement_Tag("DD") <-- 지정되있으므로 해당 갯수만큼만 나옴 위에 xml에서 총 4개의 Element가 로드되고 아래 소스에서 1번 index를 삭제함. 

            AAList alst = new AAList();
            alst.Remove( alst.DataSource[ 1 ]);
            alst.Save();

삭제 결과

<?xml version="1.0" encoding="utf-8" ?>
- <AA ID_IDENTITY="6">
  <CC _XID="1" TA="A1" />
  <CC _XID="2" TA="up1" />
  <DD _XID="3" TA="A1" />
<DD _XID="4" TA="A1" /> <-- 삭제된 Element
  <DD _XID="5" TA="A1" />
  <KK />
  <DD _XID="6" TA="OA" />
  </AA>







 


xml관련해서 만든 dll을 이용해서 간단한 예제를 만들어본다.

잠깐 써봤던거라 예제 만들려고 하니 삽질은 필수였다.

xml파일로 만드는 방법은 두가지가 존재한다.

1. JsFW.Xml.XmlHelperClass 를 이용해서 직접 각 엘리먼트로 변환 하는 방법.

2. 클래스를 정의해서 JsFW.Xml.XmlClassForFileMng 로 관리 하는방법.


__1번으로 해보자. 

JsFW.Xml.XmlHelperClass hlp = new JsFW.Xml.XmlHelperClass(@"D:\ttt\test.xml");
            JsFW.Xml.XmlElmt kk = new JsFW.Xml.XmlElmt("KK");
            kk.Att_Add("_XID", "100");
            kk.Att_Add("JJJ", "212121212121abc");

            hlp.Root_XmlElmt.ElmtAdd(kk);
            this.textBox1.Text = hlp.ToXml(); // Xml형태로 변환하여 반환함.
            hlp.Save(@"D:\ttt\test.xml");

        ** 기본 xml 파일이 존재하여 위처럼 구현되며 신규파일로 작성시 

            JsFW.Xml.XmlHelperClass hlp = new JsFW.Xml.XmlHelperClass();
            hlp.Root_XmlElmt = new JsFW.Xml.XmlElmt("Root");
            hlp.Root_XmlElmt.Att_Add("_XID", "0");
JsFW.Xml.XmlElmt kk = new JsFW.Xml.XmlElmt("KK");
            kk.Att_Add("_XID", "100");
            kk.Att_Add("JJJ", "212121212121abc"); //수정도 Add로 한다. 있으면 수정, 없으면 추가!!
            hlp.Root_XmlElmt.ElmtAdd(kk);
            this.textBox1.Text = hlp.ToXml();
            hlp.Save(@"D:\ttt\test1.xml");   

로 작성이 된다.
결과 : 

<?xml version="1.0" encoding="utf-8" ?>
- <Root _XID="0">
  <KK _XID="100" JJJ="212121212121abc" />
</Root>



__2번으로 작성해보자.  

1단계 :  클래스 선언
    [JsFW.Xml.XmlRoot_Tag("AA"), JsFW.Xml.XmlElement_Tag("DD")]
    public class AA : JsFW.Xml.JsFWXmlBaseObject
    {
        string _TA = string.Empty;
        [JsFW.Xml.XmlATT_Tag]
        public string TA
        {
            get { return _TA; }
            set { _TA = value; }
        }
    }

JsFW.Xml.XmlClassForFileMng mng
= new JsFW.Xml.XmlClassForFileMng(@"D:\ttt\", "test.xml", typeof(AA));
           mng.Load();   
            AA a = new AA();
            a.TA = "A1";         
            mng.Add(a);
            // 수정시  : _XID 가 2인것을 찾아서 객체변환을 함.
            //AA b = JsFW.Xml.XmlTransform.Get_ElmtToObject(mng["2", typeof(AA)], typeof(AA)) as AA ;
            //b.TA = "up1";
            //mng.Update(b);  // 수정.
            mng.Save();

결과 :
 * 참고 : CC, DD , KK는 각각 XmlElement_Tag 를 바꾸어 추가를 해서 바뀌어 있음.
<?xml version="1.0" encoding="utf-8" ?>
- <AA ID_IDENTITY="5">
  <CC _XID="1" TA="A1" />
  <CC _XID="2" TA="up1" />   <!-- 수정된 Element  -->
  <DD _XID="3" TA="A1" />
  <DD _XID="4" TA="A1" />
  <DD _XID="5" TA="A1" />
  <KK />
  </AA>

'# 9) My Program(.NET) > JsFW20' 카테고리의 다른 글

JSFw20.Win.Controls에 BaseForm이용하기..  (0) 2010.05.26
JsFW20.XML 을 이용한 예제 2  (0) 2010.05.24
JsFW20를 이용한 DB Select.  (0) 2010.05.22
JsFW20 설치하기...  (0) 2010.05.22
NetWork 2010 0511  (0) 2010.05.12