퇴근5분전


SBS 전자 자막의뢰 Web사이트 구축하면서 
로그파일관리 페이지를 만들면서 작성했던 부분임.
간단한 재귀로 하위 디렉토리들을 추가 하게 됨. 

 /// <summary>
 /// 폴더 이하 파일&디렉토리 검색해서 트리뷰에 추가하는 재귀 함수
 /// </summary>
 /// <param name="sDirectoryName"></param>
 /// <returns></returns>
 private TreeNode GetTreeNodes(string sDirectoryName, string rootPath)
 {

  string[] fileNames = Directory.GetFiles(sDirectoryName);
  string[] directoryNames = Directory.GetDirectories(sDirectoryName);

  int fileCount = fileNames.Length;

  //TreeNode root = new TreeNode(sDirectoryName.Replace(rootPath, ""));
  TreeNode root = new TreeNode(string.Format("{0} : {1}", sDirectoryName.Replace(rootPath, ""), fileCount), sDirectoryName.Replace(rootPath, ""));

  foreach (string dir in directoryNames)
  {
   if( dir.Replace(sDirectoryName+"\\","") == ".svn") continue;
   TreeNode tnode = GetTreeNodes(dir, sDirectoryName+@"\");    // 재귀!
   tnode.SelectAction = TreeNodeSelectAction.Select;      // 포스트백 발생하지 않게 됨.
   root.ChildNodes.Add(tnode);
  }
  //foreach (string fileName in fileNames)
  //{
  //    TreeNode tnode2 = new TreeNode(fileName.Replace(sDirectoryName + "\\", ""));
  //    tnode2.SelectAction = TreeNodeSelectAction.None;
  //    root.ChildNodes.Add(tnode2);
  //}
  root.SelectAction = TreeNodeSelectAction.Select;
  return root;
 }




Xml을 조작하기엔     XmlDocument 로 가지고 놀기 편하였다.


XmlDocument xDoc = new XmlDocument();
xDoc.Load : 읽어오기
xDoc.Save : 저장하기
XmlNodeList  xList  = xDoc.GetElementsByTagName("태그명");
xDoc["태그명"]


< XmlElement1   XmlAttribute1  XmlAttribute2 ... >
< XmlElement2   XmlAttribute1  XmlAttribute2 ... />
< XmlElement3   XmlAttribute1  XmlAttribute2 XmlAttribute3 ... />
</XmlElement1>

간단하게 위처럼 XmlElement로 접근이 쉽다.

간단한 설정 데이타나, 메세지 전달이 필요할때 변환이 쉽더라.


'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

PWD 암호화 객체.  (0) 2009.05.08
인터페이스와델리게이트조합1  (2) 2009.05.08
DB로컬 연결시 문구  (0) 2009.05.02
큐브~  (0) 2009.05.02
DB Connection Factory  (0) 2009.05.01



SMS 입력받고 데이타 길이 체크하는 처리부분.

 public partial class Form1 : Form
    {
        bool char_ASCIICODE = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {           
            int length = Encoding.Default.GetBytes(this.textBox1.Text).Length;

            if (length > 80)
            {
                this.textBox1.Text = this.textBox1.Text.Substring(0, this.textBox1.TextLength - (char_ASCIICODE ? 1 : 2));
                char_ASCIICODE = false;
                this.textBox1.Select(this.textBox1.TextLength, 0);
                return;
            }
            length = Encoding.Default.GetBytes(this.textBox1.Text).Length;
            this.label1.Text = string.Format("{0}/80", length);
        }
       
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar < 256)
                char_ASCIICODE = true;
            else
                char_ASCIICODE = true;
        }   
}

그리 어려운 코드가 아니라 주석도 없다!

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

폼간 데이타 전달  (0) 2009.05.02
그리드뷰 컨트롤  (0) 2009.05.02
Excel Export  (0) 2009.05.01
판넬 슬라이드 애니메이션  (0) 2009.05.01
데이타베이스 브라우져 ver3  (0) 2009.05.01


데이타 그리드 뷰를 Excel로 내보내는 처리를 함.


아래는 OleDb를 이용해서 Excel파일을 만들어 그 내용을 저장하는
ExcelToExportClass 객체를 만들어서 사용하는 부분임.

추가적으로 프로그래스바를 지원하며
변환 중에 프로그래스바에 진행률을 전달하여 표시해줌.

 void _Export()
        {
            ExcelToExportClass ex = new ExcelToExportClass();

            ex.ExportStart = delegate(int max)
            {
                this.Invoke(prog.MaxInit, new object[] { max });
            };

            ex.Exporting = delegate()
            {
                this.Invoke(prog.Increment, new object[] { 1 });
            };

            ex.ExportEnd = delegate()
            {
                this.Invoke(prog.Hide);
                MessageBox.Show("파일이 저장되었음.");
            };
            //ex.ExcelToExport(this.dataGridView3, DateTime.Now.ToString("HHmmss"));
            ex.ExcelToExport(this.dataGridView3);
        }

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

그리드뷰 컨트롤  (0) 2009.05.02
SMS TextLength 비교  (0) 2009.05.01
판넬 슬라이드 애니메이션  (0) 2009.05.01
데이타베이스 브라우져 ver3  (0) 2009.05.01
다각형 내부 클릭 체크.  (0) 2009.05.01


DB연결객체과 Excel Access 연결객체를 만들어주는 놈을 만들었다. 

    /// <summary>
    /// 연결 문자열 팩토리.
    /// </summary>
    public static class OleDbConnetionFactory
    {

        /*
            Provider (OLE DB only) 
            Access : Microsoft.JET.OLEDB.4.0 
            Oracle - MSDAORA 
            MS SQL - SQLOLEDB 
            Data Source(server) :  데이터베이스 위치 (Domain or IPAddress) 
            Initial Catalog (database): 데이터 베이스 이름 
            User ID/Password : 인증 정보  
         */
        /// <summary>
        /// MS-SQL 데이타 베이스 연결 문자열.
        /// </summary>
        /// <returns> 연결 문자열 </returns>
        public static string MSSQLConnectionString()
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("AppSettings");

            OleDbConnectionStringBuilder oleCon = new OleDbConnectionStringBuilder();
            oleCon.Add("Provider", "SQLOLEDB");
            oleCon.Add("Data Source", string.Format("{0}", "서버명"));
            oleCon.Add("UID", "아이디");
            oleCon.Add("PWD", "패스워드");
            oleCon.Add("Database", "DB명");
            return oleCon.ConnectionString;
        }


        /// <summary>
        /// 엑셀-> 읽기, 쓰기관련 플래그 셋팅
        /// </summary>
        public enum Excel_Imex
        {
            /// <summary>
            /// 읽기 적용
            /// </summary>
            Read = 1,
            /// <summary>
            /// 쓰기 적용.
            /// </summary>
            Write = 0
        }
        /// <summary>
        /// 엑세스(Excel) 데이타 베이스 연결 문자열
        /// </summary>
        /// <param name="ExcelFilePath"></param>
        /// <param name="imex"></param>
        /// <returns> 연결 문자열 </returns>
        public static string ExcelConnectionString(string ExcelFilePath, Excel_Imex imex)
        {
            OleDbConnectionStringBuilder oleCon = new OleDbConnectionStringBuilder();
            oleCon.Add("Provider", "Microsoft.Jet.OLEDB.4.0");
            oleCon.Add("Data Source", string.Format("{0}", ExcelFilePath));
            oleCon.Add("Extended Properties", string.Format("Excel 8.0;imex={0};HDR=Yes", (int)imex));
            return oleCon.ConnectionString;
        }
    }

'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

PWD 암호화 객체.  (0) 2009.05.08
인터페이스와델리게이트조합1  (2) 2009.05.08
DB로컬 연결시 문구  (0) 2009.05.02
큐브~  (0) 2009.05.02
XML 컨트롤...  (0) 2009.05.02


판넬에 슬라이드 애니메이션을 구현한 것임. 

참 간단하다.

브라우져에서 적용해보았고.
이에는 조금 특별한 레이아웃 기법이 필요하다.

양쪽 모두 처리 하기위해서...


// 타이머로 슬라이드 처리를 해주는 객체임.
    internal class SlidePanel : IDisposable
    {
        Timer tm = new Timer();
        int baseWidth = 0;
        Control ctrl = null;
        bool goRight = false;
        int add = 0;

        internal SlidePanel(Control _ctrl)
        {
            ctrl = _ctrl;
            this.tm.Interval = 1000 / 23;
            this.tm.Tick += new EventHandler(tm_Tick);
            baseWidth = ctrl.Width;
            goRight = true;
        }

        internal void Start()
        {
            SlideInit();
            tm.Start();
        }

        internal void ReflashWidth( int width)
        {
            if( width >= 100)
                baseWidth = width;
        }

        /// <summary>
        /// 컨트롤이 작아진건지 커진건지 확인.
        /// </summary>
        internal bool ViewEnabled
        {
            get { return ctrl.Width > 10 ? true : false; }
        }

        private void SlideInit()
        {
            add = baseWidth / 23 * 6;
            if (goRight)
            { add = -1 * (add); }
            else
            { add = +1 * (add); }
            if (this.tm.Enabled) this.tm.Stop();
            this.tm.Start();
        }


        private void Stop()
        {
            this.tm.Stop();
            goRight = !goRight;
        }

        void tm_Tick(object sender, EventArgs e)
        {
            ctrl.Width = ctrl.Width + (add);
            if (goRight)
            {
                if (ctrl.Width <= 0)
                    this.Stop();
            }
            else
            {
                if (ctrl.Width >= baseWidth)
                {
                    ctrl.Width = baseWidth;
                    this.Stop();
                }
            }
        }

        #region IDisposable 멤버

        void IDisposable.Dispose()
        {
            if (tm.Enabled) tm.Stop();
            this.tm.Dispose();
            this.tm = null;
        }

        #endregion
    }

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

SMS TextLength 비교  (0) 2009.05.01
Excel Export  (0) 2009.05.01
데이타베이스 브라우져 ver3  (0) 2009.05.01
다각형 내부 클릭 체크.  (0) 2009.05.01
프로시져 생성기  (0) 2009.05.01


옛 MES를 시작하던 시절부터 구상하던것들중 하나임. 최근에 만들었고
소스는 훈스에 공개까지 했음.

이 프로그램을 만든 의도는

첫째, DB를 보는 브라우져 형태의 폼으로 커스터마이징이 용이하도록!
둘째, 지금까지 알고있는 지식들을 총 집합 시켜보았음.
셋째, 보잘것 없는 포트폴리오를 업그레이드 시켜보고자 함.

<< 프로그램 추가 화면 >>

프로그램 추가 메뉴를 클릭 -> 프로그램 탭에서 프로그램추가를 하면 XML로 관리하게 됨.

이 프로그램에 맞는 설정을 할수 있게됨.


이처럼 새로운 프로그램을 추가 하게 되고 UI는 컨텐츠 UI로써 프로그램화면을 뜻함.
커스터마이징시 새로운 UI목록을 추가할수 있으므로 프로그램별 독립화면을 가질수도 있으며
공용으로 사용하는 화면을 만들수도 있음.


미리보기를 클릭시 설정된 프로그램의 UI를 볼수 있음.


쿼리 붙여넣고 이를 추출 하게 되면 쿼리에 사용된 파라미터들을 추출해서 우측에 표시해줌.

미리보기에 적용하면 동시에 프로그램셋팅이 동시에 저장( checkBox )이 되며
미리보기창에 그대로 표시가 됨.

추가적으로 컨텐츠 하단부에는 페이징 처리가 들어갈 예정이었고. 이에 대한 파라미터와
UI셋팅부분을 처리 할 예정있음. ( 책장 넘기듯이 UI를 만들어가려고 했었음. )



새프로그램 완료후  프로그램 목록에 새로고침 클릭시 리스트가 나오며 이 프로그램은
셋팅 상태로 적용되어 나타남.
조회, 추가, 수정, 삭제 부분은 추가될 쿼리와 지정된 UI를 통해 작성이 된다.


이 프로그래밍은 DB에 종속적이지 않기 때문에 업무에 따라 다양하게 사용가능 할것으로
판단되었음.






'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

Excel Export  (0) 2009.05.01
판넬 슬라이드 애니메이션  (0) 2009.05.01
다각형 내부 클릭 체크.  (0) 2009.05.01
프로시져 생성기  (0) 2009.05.01
유저컨트롤-[도구모음]  (0) 2009.05.01

훈스 닷넷에 질문글로 올라왔던 다각형 내부 클릭체크에 대한 답변으로 
C++로 된것을 찾아서 C#으로 변경함. 

사각형을 그렸을 때.( 일반 Rectangle이라면 Rectangle로도 충분히 체크가 가능하다. )

            pts[0] = new PointF();
            pts[0].X = 200;
            pts[0].Y = 100;

            pts[1] = new PointF();
            pts[1].X = 200;
            pts[1].Y = 200;

            pts[2] = new PointF();
            pts[2].X = 100;
            pts[2].Y = 200;

            pts[3] = new PointF();
            pts[3].X = 100;
            pts[3].Y = 100;

            pts[4] = new PointF();
            pts[4].X = 200;
            pts[4].Y = 100;

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
               //   0 To  mouse.X ;

            PointF orgin = new PointF(0, 0);
            int cnt = 0;
            PointF mDown = new PointF( Convert.ToSingle( e.X ), Convert.ToSingle( e.Y ));
            for (int i = 0; i < pts.Length - 1; i++)
                GetIntersectPoint(orgin, mDown, pts[i], pts[i + 1], ref cnt);

            if (cnt % 2 == 1)     this.Text = "내부";
            else                         this.Text = "외부";       
        }




        bool GetIntersectPoint(PointF AP1, PointF AP2,  PointF BP1,  PointF BP2,ref int Cnt)
        {
            float t;
            float s;
            float under = (BP2.Y - BP1.Y) * (AP2.X - AP1.X) - (BP2.X - BP1.X) * (AP2.Y - AP1.Y);
            if (under == 0)
            {
             //   Cnt = Cnt;
                return false;
            }

            float _t = (BP2.X - BP1.X) * (AP1.Y - BP1.Y) - (BP2.Y - BP1.Y) * (AP1.X - BP1.X);
            float _s = (AP2.X - AP1.X) * (AP1.Y - BP1.Y) - (AP2.Y - AP1.Y) * (AP1.X - BP1.X);    
            
            t = _t/under;
            s = _s/under;
            if (t < 0.0 || t > 1.0 || s < 0.0 || s > 1.0)
            {
            //    Cnt = Cnt;
                return false;
            }
            if (_t == 0 && _s == 0)
            {
             //   Cnt = Cnt;
                return false;
            }

            Cnt ++;
            
            return true;
        } 

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

판넬 슬라이드 애니메이션  (0) 2009.05.01
데이타베이스 브라우져 ver3  (0) 2009.05.01
프로시져 생성기  (0) 2009.05.01
유저컨트롤-[도구모음]  (0) 2009.05.01
이미지뷰어!  (0) 2009.05.01

페이징 컨트롤러를 만들었던것을 올림.

invalid-file

cs파일

invalid-file

ascx파일


개선 할점 : 흠 사용할때 좀 복잡했던것으로 기억함.( 디자인모드에서 이벤트 등록이 안됨 )

   protected void Page_Load(object sender, EventArgs e)
    {
        PageNavigator1.PageClick += new ClickEvent(PageNavigator1_PageClick);
       
    }

    void PageNavigator1_PageClick(PageEventArgs e)
    {
        throw new Exception("The method or operation is not implemented.");
    }

이렇게 페이지마다 등록해서 썼던걸로 기억함.

이 프로그램은 SBS 전자자막의뢰 웹사이트 구축시 만들어 사용하던 프로그램으로

DB와 연동시켜 DB프로시져를 자동생성하고 생성된 프로시져를 통해서

비지니스레이어부분을 자동생성처리 하는 프로그램임.

장점 : 반복되는 비지니스 레이어를 손쉽게 1분안에 만들어낼수 있는 것으로 작업시간을 줄일수 있음.


사용자 삽입 이미지
                              << 테이블 정보를 가져와 프로시져를 생성한 모습 >>

사용자 삽입 이미지
                                          << 프로시져 정보를 가져온 모습 >>

1. 캡슐화 할 클래스명과 기능명을 입력 후
2. 코드 만들기를 누르면 비지니스처리 코드와 비지니스 코드를 실제 이용하는 로직에 대한
코드까지 가져옴.

<< 만들어진 코드 >>
/* BSL 구현에서 반복작업을 줄이기 위해 만들어내는 코드임( 버그 주의 ) */
using FrameWork.DB.DAC;
using System.Data.SqlClient;

namespace FrameWork.DB.BSL
{
 public class _TempClassName_ : ValidateQuery, IDisposable
 {

  public bool _TempMethodName_(params object[] objParams)
  {
   bool returnValue  = false;

   try
   {
    using (DataAccess dac = new DataAccess())
    {
     SqlParameter[] sqlparams = new SqlParameter[objParams.Length];
     sqlparams[0] = new SqlParameter("@Num", SqlDbType.Int);
     sqlparams[1] = new SqlParameter("@T1", SqlDbType.NChar,10);
     sqlparams[2] = new SqlParameter("@T2", SqlDbType.NChar,10);
     sqlparams[3] = new SqlParameter("@T3", SqlDbType.NChar,10);
     sqlparams[4] = new SqlParameter("@T4", SqlDbType.NChar,10);

     for(int cnt  = 0; cnt < objParams.Length ; cnt++)
     {
      this.Validate(sqlparams[cnt].SqlDbType, objParams[cnt]);
      sqlparams[cnt].Value = (objParams[cnt] == null ? DBNull.Value : objParams[cnt]);
     }

     returnValue = dac.TransactionProcedure("UP_Table_1_REGISTER", sqlparams);
    }
   }
   catch(Exception exception)
   {
    throw exception;
   }
   return returnValue;
  }

  public void Dispose()
  {
   // throw new Exception("The method or operation is not implemented.");
  }
 }
}

<< cs 에서 Bsl을 사용하는 코드 >>

/* .cs내에 사용하는 메서드 내부에서 사용하는 코드임.*/
public void _TempMethodName_()
{
 try
 {
  using(FrameWork.DB.BSL._TempClassName_ _tempclassname_1 = new FrameWork.DB.BSL._TempClassName_())
  {
   object[] UserParam = new object[5];

   UserParam[0] = DBNull.Value;  //@Num
   UserParam[1] = DBNull.Value;  //@T1
   UserParam[2] = DBNull.Value;  //@T2
   UserParam[3] = DBNull.Value;  //@T3
   UserParam[4] = DBNull.Value;  //@T4

   if (_tempclassname_1._TempMethodName_(UserParam) == false)
   {
    ErrorMessage = "실패했습니다.";
   }
   else
   {
    //성공후 이뤄지는 처리
   }
  }
 }
 catch(Exception ex)
 {
  ErrorMessage = ex.Message;
 }
}

}

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

판넬 슬라이드 애니메이션  (0) 2009.05.01
데이타베이스 브라우져 ver3  (0) 2009.05.01
다각형 내부 클릭 체크.  (0) 2009.05.01
유저컨트롤-[도구모음]  (0) 2009.05.01
이미지뷰어!  (0) 2009.05.01