퇴근5분전

달력 컨트롤 소스임. Web용임.

달력을 쉽게 만들려면
DateTime을 가지고 쉽게 제작이 가능함.

요구사항에 적합한 달력을 만들기 위해서 새로운 달력이 필요하다면 한번쯤 만들어보는것도
괜찮은 듯 함.
중요한 부분만 글씨를 굵게 표시 했음.




 private void create(int year, int month)
    {

        DateTime date = new DateTime(year, month, 1); // 해당년월에 1일.

        ctrl_CalendarBody.Text = "day : " + DateTime.DaysInMonth(year, month).ToString(); // 총 일수
        ctrl_CalendarBody.Text += "week : " + date.DayOfWeek.ToString();
        int totalDay = DateTime.DaysInMonth(year, month);

        StringBuilder sb = new StringBuilder("<table width=\"700\" border=\"1\" cellspacing=\"5\" cellpadding=\"3\"><tr><td bgcolor=\"FFFFFF\">");
        string[] dayofweek = Enum.GetNames(typeof(DayOfWeek));

        sb.AppendFormat("<tr align=center>");
        for (int i = 0; i < dayofweek.Length; i++)
            sb.AppendFormat("<td style=\"width: 100px;height: 30px;\">{0}</td>", dayofweek[i].Substring(0, 3));
        sb.AppendFormat("</tr>");
        sb.AppendFormat("<tr>");
        string style = string.Empty;
        string text = string.Empty;
        for (int day = 1 - (int)date.DayOfWeek; day <= totalDay; day++)
        {
            //설정
            if ((day + (int)date.DayOfWeek) % 7 == 0) // 토요일
                style = string.Format("color:{0};", "blue");
            else if ((day + (int)date.DayOfWeek) % 7 == 1) // 일요일
                style = string.Format("color:{0};", "red");
            else
                style = string.Format("color:{0};", "black"); // 월 ~ 금요일


            if (day <= 0)
                text = "&nbsp";
            else
            {
                if (day == DateTime.Now.Day && year == DateTime.Now.Year && month == DateTime.Now.Month) // 오늘 날짜 표시
                {
                    style += "font-weight:bold;";
                    text = day.ToString();
                }
                else
                    text = day.ToString();
            }

            //해당값 입력.
            sb.AppendFormat("<td style=\"{1}\">{0}</td>", text, style);
            if (0 == (day + (int)date.DayOfWeek) % 7) // 다음주~ 로 넘어가는 부분   DayofWeek 요일 열거형
                sb.Append("</tr><tr>");               // (day + (int)date.DayOfWeek) % 7  나머지가 0

            style = string.Empty;
        }
        sb.AppendFormat("</tr>");
        sb.AppendFormat("</table>");
        ctrl_CalendarBody.Text = sb.ToString();
        sb.Remove(0, sb.Length);
        sb = null;
    }

사용자 삽입 이미지
사용자 삽입 이미지

'--- 취미 > 만화' 카테고리의 다른 글

색칠이 쉽지 않넹...  (0) 2009.07.01
타블렛으로 그린 첫그림...  (0) 2009.05.03

이건 웹페이지에서임.
누님 공부를 도와주면서 설명해준 소스임.
방식은 앞서 트리뷰 노드 추가와 같으나
그 처리 방식이 조금 다름.

데이타를 가져와서
이걸 TreeNode를 상속받은 cTreeNode로 바꾼다
그리고 cTreeNode[] 를 순차적으로 돌면서
자기를 참조하고 있는 자식이 될 노드들을 찾아서 추가하게 됨.

이때 자신이 참조하는 값이 0이면 트리뷰에 직접 붙인다.( Root 를 가리키는 셈임 )

  protected void Page_Load(object sender, EventArgs e)
    {
        TreeView1.SelectedNodeChanged += new EventHandler(TreeView1_SelectedNodeChanged);

        if (!IsPostBack)
        {  
            SetPage(); 
        }
    }

    public class cTreeNode : TreeNode
    {
        bool isDelete = false;

        public bool IsDelete
        {
            get { return isDelete; }
            set { isDelete = value; }
        }

        int seqNo = 0;

        public int SeqNo
        {
            get { return seqNo; }
        }

        int parentNo = 0;

        public int ParentNo
        {
            get { return parentNo; }
        }

        public cTreeNode(int seq, int pno, string _text, string _value)
        {
            this.seqNo = seq;
            this.parentNo = pno;
            this.Text = _text;
            this.Value = _value;
        }
    }

    private void SetPage() 
    {
        try
        {
            TreeView1.Nodes.Clear();
            DataSet ds = new BusinessLayer().SelectCategory();
            if (ds != null && ds.Tables.Count > 0)
            {
                cTreeNode[] ctreenodes = GetTreeNode(ds.Tables[0]); //목록이 담긴 테이블을 넘겨준다.                   
                Binding(ctreenodes); //트리뷰에 바뀐 TreeNode를 집어 넣는 부분
                ds.Clear();
                ds.Dispose();            
            }
            ds = null; 
        }
        catch(Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }


    /// <summary>
    /// 1. DataRow -> TreeNode 변환 
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    #region
    private cTreeNode[] GetTreeNode(DataTable dt)
    {
        cTreeNode[] trNodes = new cTreeNode[dt.Rows.Count];
        int cnt = 0;
        int seq  = 0;
        int pno = 0;
        string title = string.Empty;

        foreach (DataRow dr in dt.Rows)
        {
            seq  = Convert.ToInt32( dr["SEQNO"] );
            pno = Convert.ToInt32(dr["PARENTNO"] == DBNull.Value ? "0" : dr["PARENTNO"]);
            title  =  dr["TITLE"].ToString();
            trNodes[ cnt++ ] = new cTreeNode( seq, pno, title, title+"_value" ); //cTreeNode가 1개씩 만들어져서 채워짐
        }
        return trNodes;
    }
    #endregion

    /// <summary>
    /// 트리노드 하나로 묶어주기
    /// </summary>
    /// <param name="trNodes"></param>
    /// <returns></returns>
    #region Binding(cTreeNode[] trNodes)
    private void Binding(cTreeNode[] trNodes)
    {
        TreeNode tNode = null;

        foreach (cTreeNode trNode in trNodes)
        {        
            if (trNode.ParentNo == 0)      
            {
               TreeView1.Nodes.Add( trNode );
               tNode = trNode;
            }

            TreeDepth(trNodes, trNode);          
        }
    }
    #endregion

    /// <summary>
    /// 자기를 참조 하고 있는 노드를 아래로 붙이는 메서드.
    /// </summary>
    /// <param name="trNodes">목록리스트</param>
    /// <param name="trNode">선택된값</param>
    #region TreeDepth(cTreeNode[] trNodes, cTreeNode trNode)
    private void TreeDepth(cTreeNode[] trNodes, cTreeNode trNode)
    {
        foreach (cTreeNode tNode in trNodes)
        {
            if (trNode.SeqNo == tNode.ParentNo) //자기를 참조하고 있는 노드인지
            {
                trNode.ChildNodes.Add(tNode);   //자신을 참조하고 있으면 자기 아래로 붙이기.
            }
        }
    }
    #endregion


    private void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript(this.GetType(), "selectTreeNode", "alert('" + TreeView1.SelectedNode.Text + "를 선택했습니다.');", true);
    }

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

Form 사이즈 변경 못하게 막기  (0) 2009.05.14
MDI 창에서 스크롤바~  (0) 2009.05.14
트리뷰] 트리뷰 노드추가하기 1  (0) 2009.05.09
Html Table 파싱  (0) 2009.05.09
게임 챗팅창처럼...  (0) 2009.05.09

사용자 삽입 이미지

 옛날 옛날에 만들었던...
트리는 구조만 제대로 파악한다면, 의외로 쉽다.
디자인 패턴에서 Composite도 트리형태로 구현이 가능하다.
예전에 만들었던 내용대로 올림.

간단하게 우측에 보이는 데이타 구조에서
메뉴네임을 순차적으로 돌면서 참조하고있는 노드를 자기 아래노드로 추가시키는 방법임.

재귀 호출관련해서 알고 있으면 이해가 편함.


// 아래는 소스임

 DataTable TreeMenu  = new DataTable();


  private void Form1_Load(object sender, System.EventArgs e)
  {
   TreeMenu.Columns.Add("MenuName");
   TreeMenu.Columns.Add("Parents");
   
   DataRow dr ;

   dr = TreeMenu.NewRow();
   dr[0] = "A";   dr[1] = "root";

   TreeMenu.Rows.Add( dr);

   dr = TreeMenu.NewRow();
   dr[0] = "B";   dr[1] = "A";
   TreeMenu.Rows.Add( dr);

   dr = TreeMenu.NewRow();
   dr[0] = "C";   dr[1] = "A";
   TreeMenu.Rows.Add( dr);

   dr = TreeMenu.NewRow();
   dr[0] = "D";   dr[1] = "B";
   TreeMenu.Rows.Add( dr);

   dr = TreeMenu.NewRow();
   dr[0] = "E";   dr[1] = "D";
   TreeMenu.Rows.Add( dr);

   dr = TreeMenu.NewRow();
   dr[0] = "F";   dr[1] = "B";
   TreeMenu.Rows.Add( dr);

   dr = TreeMenu.NewRow();
   dr[0] = "G";   dr[1] = "C";
   TreeMenu.Rows.Add( dr);

   dr = TreeMenu.NewRow();
   dr[0] = "H";   dr[1] = "root";
   TreeMenu.Rows.Add( dr);

   this.dataGrid1.DataSource = TreeMenu;


   // root 꼭데기 찾아서 추가!!
   DataRow[]   selectRows = TreeMenu.Select("Parents='root'");

   for( int i = 0 ; i < selectRows.Length ; i++)
    this.treeView1.Nodes.Add( new TreeNode( selectRows[i][0].ToString(), GetTreeNodes( TreeMenu , selectRows[i][0].ToString()) ) );
 

   DataSet ds = new DataSet();
   ds.Tables.Add( TreeMenu );

   ds.WriteXml(@"C:\treeMenu.xml", XmlWriteMode.IgnoreSchema );
  }


  // 재귀함수에 의해 treenode추가!
  private TreeNode[] GetTreeNodes( DataTable dtSource,  string Parens )
  {
   TreeNode[] returnTreeNodes;
   
   DataRow[]   selectRows = dtSource.Select("Parents='"+Parens+"'");
   returnTreeNodes = new TreeNode[ selectRows.Length ];
   for( int idx  = 0; idx < selectRows.Length ; idx++)
   {
    returnTreeNodes[idx] = new TreeNode( selectRows[idx][0].ToString() , GetTreeNodes( dtSource , selectRows[idx][0].ToString() ) );
    returnTreeNodes[idx].Tag = selectRows[idx][0].ToString();
   }
   return returnTreeNodes;
  }

  private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
  {
   if(e.Node.GetNodeCount( true ) == 0)
    this.Text = e.Node.Text;
  }






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

MDI 창에서 스크롤바~  (0) 2009.05.14
트리뷰] 트리뷰 노드추가하기 2  (0) 2009.05.09
Html Table 파싱  (0) 2009.05.09
게임 챗팅창처럼...  (0) 2009.05.09
드레그 앤 드랍! (2)  (0) 2009.05.09

우~ 쒸... 마우스 오버된 이미지의 top + height 면 Div의 포지션이 지정 되는건뎅 값이 없다고만 나오넹... 쥐럴.....

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

Asp.Net] Razor, MVC 스터디..  (0) 2018.03.15
달력을 만들때...  (0) 2009.05.11
철호야! 공부하자!  (0) 2009.05.08
리피터 사용!!  (0) 2009.05.08
Table Row-> Select, MouseOver, Out관련  (0) 2009.05.08

자바스크립트로  메뉴관리 객체를 만들었음.

/*
 자바스크립트
 메뉴 Display  
 제작 윤지송 aseuka@hanmail.net
 2008.07.27
*/ 
  // 크기정보 변수
  function Size(_width, _height)
  {
   this.Width = _width;
   this.Height = _height;
   
   this.toString = function()
   {
    return "Width:("+this.Width.toString() +"), Height:("+this.Height.toString()+")"+"\n";
   }
   return this;
  }
  // 위치정보 변수
  function Point( x, y)
  {
   this.X = x;
   this.Y = y;

   this.toString = function()
   {
    return "X:("+this.X +"), Y:("+this.Y+")"+"\n";
   }
   return this;
  }

  // 단일 1개의 이미지 Icon 정보.
  function  imgIcon( path, _x, _y, _width, _height, _linkURL )
  {  
   this.ImgPath =  path;  
   this.ImgLoction =  new Point(_x, _y);
   this.ImgSize =  new Size( _width, _height );
   this.LinkURL    = _linkURL;

   this.toString = function()
   {
    var  returnString =  "Path  :" + this.ImgPath+"\n";
      returnString +=  "Loction :" + this.ImgLoction.toString();
      returnString +=  "Size  :" + this.ImgSize.toString();
    return returnString;
   }
   return this;
  }

  // Sub 메뉴Icon별 관리 객체.
  function ImgIcons( _name )
  {
  
   this.Name  = _name;
   this.imgs  = new Array();
   this.Add  = function( _path, _x, _y, _width, _height, _linkURL )
   {
    this.imgs[ this.imgs.length ] = new imgIcon( _path, _x, _y, _width, _height, _linkURL );           
   }
   this.toString = function()
   {
     var returnString  = "";
     for( i = 0; i < this.imgs.length ; i ++ )
     {      
      returnString += this.imgs[i].toString() + "|";
     }
     return returnString;
   }
   return this;
  }
/*
 //////////////////////////////////////////////////////////////////////////////////
*/

  // 메뉴 관리 하는 객체.
  function MenuList( _Id ,  _divName )
  {
   this.Id  = _Id;
   // 나타날 divId
   this.divName  = _divName;

   this.ar  = new Array();   
   this.Add  = function( imgIcons )
   {    
    this.ar[ this.ar.length ] = imgIcons;
   } 
   
   this.GetImgIcons = function( ArrayName )
   {       
    for( i = 0; i < this.ar.length; i++)
    {       
     if(this.ar[i].Name == ArrayName)
     {      
      return this.ar[i];
     }
    }
    return null;
   }

      this.MakeImg  =  function( imgIcon )
   {
    var  CreateImgHTML =  "<img src='" +imgIcon.ImgPath +"' ";
      CreateImgHTML += " style='width:"+imgIcon.ImgSize.Width +";";
      CreateImgHTML += " height:"+imgIcon.ImgSize.Height+ ";border:0;'";
      CreateImgHTML += " onmouseover='"+this.Id+".bImgMouseOver=true;'";
      CreateImgHTML += " onmouseout='"+this.Id+".MouseOut();'";
      CreateImgHTML += " >";

    var  AtagHTML   = "<a href='"+imgIcon.LinkURL+"' >" +  CreateImgHTML +"</a>";
      
    if( imgIcon.LinkURL )
    {
     return  AtagHTML;
    }
    else
    {
     return CreateImgHTML;
    } 
   }

   this.ClearLayer  =  function( )
   {         
    if(this.bImgMouseOver == false)
    {
     var div  = document.getElementById(this.divName);    
     div.innerHTML = ""; 
     div.style.display = "none";
    }
   }
   return this;
  }

  // 객체 속성 정의
  MenuList.prototype =    
  {Vertical: false // 가로(false) 세로(true)...
  ,
  TimerInterVal : 1000
  , 
  bImgMouseOver: false
  ,
  MouseOut :   function(){
       var fn_repeater = this.Id+".ClearLayer()";
       this.bImgMouseOver = false;
       this.tmID = setTimeout( fn_repeater , this.TimerInterVal );
      } 
  ,
  MouseOver:  function( img, arName ){

     var  strTagString = "";
     var  div  = document.getElementById(this.divName);

     this.bImgMouseOver = true;  
         
     var subMenuArray =  this.GetImgIcons(arName);
           
     if( subMenuArray && div )
     {   
      div.innerHTML  = "";
     
      
      for( i = 0 ; i < subMenuArray.imgs.length ; i++)
      {
       strTagString  += this.MakeImg( subMenuArray.imgs[i] );    
      }  
      
      if( img )
      {
       div.style.top = ((img.style.top ? img.style.top : 0) +  img.height + 10);   
       div.style.left = (img.style.left? img.style.left : 0);
       
       // 가로
       if( this.Vertical == false )
       {
        div.style.width  = img.width * subMenuArray.imgs.length;
        div.style.height = 0;
       }
       else
       {
        div.style.width  = img.width;
        div.style.height = img.height;
       }       
       div.style.zindex = 200;
       div.style.position  ='absolute';      
      }

      div.innerHTML  = strTagString;
      div.visibility = "show";
      div.style.display = "block";            
     } 
    }
   
  }; 


메뉴를 구현한 js 파일


  

'# 6) JavaScript' 카테고리의 다른 글

자바 스크립트] XOR 암호화.  (0) 2010.12.31
[javascript] 정규식 관련..  (0) 2010.11.18
자바스크립트 Array사용  (0) 2009.05.08
자바스크립트 디버거  (0) 2009.05.08
웹 에서 F1키 사용하기.  (0) 2009.05.08

KT에 잠깐 있을때 부탁받았던 내용인데

특정 테이블 폼을 파싱해서 HTML테이블과 데이타만 남기고 이를 dataTable로 만들어서 쿼리를 만드는 프로그램을 만들고 있었음.

이후.. 옆에 동료의 사정에 귀기울여 만들던 것을 멈췄음.

정규식을 모를때라서 이렇게 된다!!
<로 시작해서 > 끝나는걸 찾아서 Table관련 태그면 그에 맞춰서 작업했던 기억이 남.



  #region  HTML 태그 제거

  /*  TD태그 안에 다른 태그들 삭제! */
  string TdFilter(string TDString)
  {
   System.Text.StringBuilder  sb  = new System.Text.StringBuilder(); 
     
   // Name  =      2테이블1Row 1Col 은 name

   // TableData =  3테이블1Row는 컬럼명
   //           =  3테이블2Row부터는 데이타


   if( TDString.IndexOf("<",0) == -1 ||  TDString.IndexOf(">",0) == -1 || TDString.IndexOf("html",0) == -1 ||  TDString.IndexOf("head",0) == -1)
   {
    MessageBox.Show("완전한 html이 아닙니다.","Warning - [html, head 미포함!]", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    return TDString;
   }

   string strTagArea = string.Empty;   
   int   sIndx = 0;
   int   eIndx = 0;
   int   cnt  = 0;

   int TableDepthCnt  =  0; 
   int TrCnt = 0;
   int TdCnt  = 0;

   string TagName = "";

   
   DataRow dr = dt.NewRow();

   try
   {
    foreach( char cc in TDString)
    {
     if( cc.CompareTo('<') == 0 )
     {
      // > ~ (<)
      if( cnt > eIndx)
      {
       strTagArea = TDString.Substring( eIndx + 1 ,cnt -  eIndx -1 );
       sb.Append( strTagArea.Replace(Environment.NewLine,"").Replace("\n","").Replace("\t","").Trim());
     
       switch(TagName)
       {
        case "TD":
         if( TableDepthCnt == 2 && TrCnt == 1 && TdCnt == 1)
         {
          dt.TableName = strTagArea;
         }
         else if(TableDepthCnt == 3 && TrCnt == 1)
         {          
          dt.Columns.Add( strTagArea );          
         }
         else if(TableDepthCnt == 3 && TrCnt > 1)
         {           
          dr[ TdCnt - 1 ] = strTagArea;
         }
         break;
        case "TR":
         if( TableDepthCnt == 3 && TrCnt > 1 )
         {          
          dr = dt.NewRow();
         }
         break;
        case "</TR>":
         if( TableDepthCnt == 3 && TrCnt > 1)
         { 
                    
          dt.Rows.Add( dr );                
         }
         break;
       }
      }   
      sIndx  = cnt;
     }
     else if( cc.CompareTo('>') == 0)
     {     
      eIndx = cnt;
      strTagArea = TDString.Substring( sIndx , eIndx - sIndx + 1 );
      if( strTagArea.Substring(1,2).ToUpper().CompareTo("TD") == 0 )
      { 
       TagName = strTagArea.Substring(1,2).ToUpper();    
       sb.Append( strTagArea + Environment.NewLine); 
       TdCnt++;
      }
      else if( strTagArea.ToUpper().CompareTo("</TD>") == 0)
      {
       TagName = strTagArea.ToUpper();
       sb.Append( strTagArea + Environment.NewLine); 
      }
      else if(strTagArea.Substring(1,2).ToUpper().CompareTo("TR") == 0 )
      {
       TagName = strTagArea.Substring(1,2).ToUpper();
       TrCnt ++;
       TdCnt = 0;      
       sb.Append( strTagArea + Environment.NewLine);
      }
      else if ( strTagArea.ToUpper().CompareTo("</TR>") == 0)
      {    
       TagName = strTagArea.ToUpper();
       sb.Append( strTagArea + Environment.NewLine); 
      }
      else if(strTagArea.Substring(1,2).ToUpper().CompareTo("TA") == 0 )
      {   
       TagName  = strTagArea.Substring(1,2).ToUpper();
       TableDepthCnt ++;
       TrCnt = 0;
       TdCnt  = 0;
       sb.Append( strTagArea + Environment.NewLine); 
      }
      else if(strTagArea.ToUpper().CompareTo("</TABLE>") == 0)
      {     
       TagName = strTagArea.ToUpper();
       sb.Append( strTagArea + Environment.NewLine);       
      }         
     }
     cnt++;
    }
   }
   catch{}
   this.dataGrid1.DataSource = dt;
   this.Text = dt.Rows.Count.ToString();
   return sb.ToString();
  }


참길다!!


<html><head>
<body>
<table>
 <tr><td></td><td></td>
 </tr>
</table>
<table>
 <tr><td>TableA </td><td></td>
 </tr>
</table>
<table>
 <tr><td> A </td><td>B</td></tr>
 <tr><td>1</td><td>2</td></tr>  
 <tr><td>1</td><td>2</td></tr>  
 <tr><td>1</td><td>2</td></tr>  
 <tr><td>1</td><td>2</td></tr>  
 <tr><td>1</td><td>2</td></tr>  
</table>
</body>
</head></html>

이런 소스를  DataTable로 만든후 쿼리를 만들려고 했었음.

적용후 나오는 DataTable을 DataGrid에 담은 모습임.




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

트리뷰] 트리뷰 노드추가하기 2  (0) 2009.05.09
트리뷰] 트리뷰 노드추가하기 1  (0) 2009.05.09
게임 챗팅창처럼...  (0) 2009.05.09
드레그 앤 드랍! (2)  (0) 2009.05.09
드래그 앤 드랍!  (0) 2009.05.09

< 실행 화면 >

게임 채팅 처럼 아래서 위로 올라가는 건뎅...
새로 시작해서 첫줄을 넣었을때 나오는 화면임.

그 당시 복잡한 방법으로 만든기억이남.
우선 구현은 해보고 그 다음 더 좋은 방법으로 만들어가기 위해서...

// 소스
string[] storeChat = new string[50];
const  byte  byViewLineCount = 20;
int   iCurrentLine =  0;


 private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
  {

   if(e.KeyCode == Keys.Enter)
   {
    if(this.textBox1.Text.CompareTo("") == 0 || this.textBox1.Text.CompareTo( string.Empty) == 0)
     return;
    SaveViewChat( this.textBox1.Text);
    ViewStrings();
    this.textBox1.Clear();
   }
  }

  private void SaveViewChat( string Chat)
  {
      
   if(iCurrentLine + 1 == storeChat.Length)
   {
    Swap();
    iCurrentLine = storeChat.Length - 2;
   }
   storeChat[iCurrentLine] =  Chat;
   iCurrentLine++;
  }

 private void ViewStrings()
  {
   System.Text.StringBuilder sb  = new System.Text.StringBuilder();

   int count  = ( iCurrentLine > byViewLineCount ? byViewLineCount: iCurrentLine);
   if(iCurrentLine < byViewLineCount)
   {
    for( int i = 0; i < byViewLineCount - iCurrentLine ; i ++)
    {
     sb.Append( Environment.NewLine );
    }
   }
   for(int i  =  count - 1 ; i >= 0 ; i--)
   {
    sb.Append( string.Format("{0} : {1}" , i , storeChat[(iCurrentLine-1) - i] + Environment.NewLine) );    
   }   
   
   this.textBox2.Text = sb.ToString().Substring(0, sb.Length -2);
   this.textBox2.Select(this.textBox2.TextLength, 0);
   this.textBox2.ScrollToCaret();
   this.textBox2.Update();
  }
  private void Swap()
  {
   string strTemp = string.Empty;
   for(int i = 0; i < storeChat.Length - 1 ; i ++)
    storeChat[i] = storeChat[i + 1];
  }



소스가 간단하니 주석은 안넣음.

총 50라인을 저장하고
이중에 최근 20개를 보여줌.







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

트리뷰] 트리뷰 노드추가하기 1  (0) 2009.05.09
Html Table 파싱  (0) 2009.05.09
드레그 앤 드랍! (2)  (0) 2009.05.09
드래그 앤 드랍!  (0) 2009.05.09
Ms-Sql을 띠우자!  (0) 2009.05.08

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

Html Table 파싱  (0) 2009.05.09
게임 챗팅창처럼...  (0) 2009.05.09
드래그 앤 드랍!  (0) 2009.05.09
Ms-Sql을 띠우자!  (0) 2009.05.08
데이타테이블 컬럼위치 바꾸기  (0) 2009.05.08

드레그 앤 드랍 테스트 및 구현.

소스             = >           대상

0.대상.AllowDrop  = true;

1. 소스.MouseDown, Move, Up 중에
소스.DoDragDrop() 호출하면서 전달데이타 패킹
 ex) 소스.DoDragDrop( "Drag&Drop", DragDropEffects.All | DragDropEffects.Copy  );
 
2. 대상.DragOver 이벤트에서 e.Effect 를 결정
 ex) e.Effect =  DragDropEffects.All;

3. 대상.DragDrop 이벤트
        ex)
 if (e.Data.GetDataPresent(typeof(System.String)))
 {
  Object item = (object)e.Data.GetData(typeof(System.String));
  // Perform drag and drop, depending upon the effect.
//  if (e.Effect == DragDropEffects.All)// Over에서 Effect에 열거형과 같은지 체크해서 적용여부결정
//  {               
   this.textBox1.Text = item.ToString();   
//  }
 }        

간단하게  정리 한것이며.
복잡하게 구현될수도 있음.

차후 디자이너 같은 프로그램을 만들어낼 때 한번 해볼까 싶다.


// 예제 소스중에 일부..  아래순서대로 일어나게됨.

textBox1.ArowDrop = true;   상태임.

private void button1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
  {
   if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
   {
    button1.DoDragDrop( "Drag&Drop", DragDropEffects.All | DragDropEffects.Copy  );
   }
  }

  private void textBox1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
  {
   e.Effect =  DragDropEffects.All;
  }

  private void textBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
  {

   if (e.Data.GetDataPresent(typeof(System.String)))
   {

    Object item = (object)e.Data.GetData(typeof(System.String));

    // Perform drag and drop, depending upon the effect.
//    if (e.Effect == DragDropEffects.Copy)
//    {               
     this.textBox1.Text = item.ToString();   
//    }
   }  
  }

처리되는 이미지 캡쳐가 안되서 이미지 첨부 안함!


훈스에 트리뷰 관련해서 드래그앤드랍으로 답변단것이 있음
찾아서 올려야징!

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

게임 챗팅창처럼...  (0) 2009.05.09
드레그 앤 드랍! (2)  (0) 2009.05.09
Ms-Sql을 띠우자!  (0) 2009.05.08
데이타테이블 컬럼위치 바꾸기  (0) 2009.05.08
이벤트  (0) 2009.05.08