퇴근5분전

 

 Mockup Designer 에서 판넬에 스크롤을 넣을 수가 없어서 이걸 비스므리 하게...

 

트랙바를 이용해서 구현했다.

 

 

아래처럼 하면 내부 컨텐츠 컨트롤이 뷰 판넬보다 크게 만들어놓고

테스트 하면 트랙바가 움직일때 내부 컨트롤들을 이동시켜주므로

스크롤 되는 것 처럼 보인다.

 

        int prev = 0;

 

        public Init()
        {             
            trackBar1.Maximum = ( {내부 컨텐츠 컨트롤}.Height - {뷰 판넬}.Height + 2 );
            trackBar1.Value = trackBar1.Maximum;
            prev = trackBar1.Maximum - trackBar1.Value;
        }


        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            foreach (Control ctrl in {뷰 판넬}.Controls)
            {

                ctrl.Top += (prev - (trackBar1.Maximum - trackBar1.Value));
            }

            prev = trackBar1.Maximum - trackBar1.Value;
        }

 

 

 

## 기존 버그...

Mockup Designer에서 스크롤을 적용하면 ...

 

컨트롤을 드래그해서 올리거나 또는 끌어다가 이동시키면 스크롤이 미친듯이 움직여서 .... 제어가 안된다.

 

그래서 없이 썼는데, 모니터가 작으니 큰 화면 디자인이 안되었다.

 

편법으로 위와 같이...

 

 

오늘도 12시가 넘어버렸넹...

 

집에서 코딩 그만해야되는데!!!!! 쭙~

 

JSFW.Mockup 프로그램을 사용하다가 예외가 뜨길래 디버깅을 해봤다.

 

전달되어야 할 대리자가 null 이었다. 왜지?

 

처음엔 if문으로 null체크하고 넘어갔는데, 왠지 모를 찝찝함으로 계속 테스트를 하면서 왜 null 이 되는지 찾았다.

 

 

mockup의 속성에서 Editor를 띄워서 컬럼목록으로 컨트롤을 생성하는 창을 띄웠다.

그리고 이 창에서 컨트롤을 생성하여 드래그 앤 드랍으로 원하는 위치에 떨어뜨린다.

 

그리고 떨어뜨린 컨트롤을 선택했을때

 1. 속성창에 해당 컨트롤의 속성들을 보여준다.

 2. 선택된 컨트롤을 지정해둔다.

   - delete 키를 눌렀을때 해당 컨트롤 삭제 처리해야 하기때문에...

 

 

근데 여기서 문제가... 창에서 생성된 컨트롤에 이벤트를 부여할때

 

판넬.대리자를 넘겨준다. => 기본Editor 객체 => 생성창 => 생성된 컨트롤.대리자 = 넘어온.대리자;

 

여기서 배치가 끝나고 생성창을 닫으면!  실제 컨트롤.대리자 에 할당되어 있던 넘어온.대리자(판넬.대리자)가 null값이 되었다.

 

그래서 선택된 컨트롤로 지정이 안되어 삭제가 안되고 이전에 이벤트를 제대로 탄 객체가 선택되어진채 있다가 delete 누르면 그게 날아간다.

 

이걸 기본Editor에서 컨트롤을 생성하여 드래그 앤 드랍 처리를 하고 이벤트도 여기서 붙인다.

그리고 이 메서드를 대리자를 통해서 생성창에 넘기고, 생성된 컨트롤.대리자에 또 넘겨준다.

실제 컨트롤을 드래그를 시작하면 원래 Editor개체에서 생성을 하여 직접 전달하게 된다.

 

창이 닫혀도 이벤트는 계속 유지되기 때문에... 정상동작되는 것을 확인하였다.

 

글로 쓰니 ...alskdjflasjdflaj

 

 

 

 

추가... 08-07

 

새것으로 만들어진 프로그램을 슬레이트pc에 설치하고 터치로 핸들링 해봤더니... ㅡ.,ㅡ;;;

옛날것이 더 좋다.는 결론이 나왔다. 아~~~~

 

 

 

 

#####################################################################################

새것과 옛날에 만든 것

 

 

 새것은 각 귀퉁이에 마우스를 올리면 커서가 나타난다. 그리고 버튼을 누른체 이동하면 자유롭게 늘거나 줄이거나 가능하다.

중앙을 선택하면 이동이 된다.

 

 

 옛날것은 Mover 라는 클래스에 각 위치별 제어컨트롤을 등록시켜주고,

컨트롤을 클릭 했을때 해당 제어 컨트롤들을 원하는 위치에 딱! 배치시켜주는 건데...

 

 예전에 저걸 찾을때 코드프로젝트에도 구글에도 없길래 만들었었다.

 

새것 저건 최근에 레이어그리드 cell 넓이 높이 조절하는 코드를 구현하다가 컨트롤에도 만들어보면 어떨까 해서 만들어봤다.

 

나름 괜찮네?

 

* 새거

 MockupControlReSizeAndMoving mr = new MockupControlReSizeAndMoving(true);

 mr.AttachedEvents( this );  // this는 호스팅될 컨트롤!

 

* 구형

JSFW_Mover mv = new JSFW_Mover();

mv.Regist(new MV_M());
mv.Regist(new MV_L());
mv.Regist(new MV_T());
mv.Regist(new MV_R());
mv.Regist(new MV_B());
mv.SetParent(BackGround_DesignPanel);

 

이렇게 해놓고

컨트롤 mouseDown 이벤트에서

mv.HostControl = 해당컨트롤;

이렇게 해주면 위 그림처럼 착! 달라붙는다.

 

 

 

 

http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project 

 

다른 프로그램을 내 프로그램 판넬에 띄우는 방법!

 

이건 예전 지진통보시스템 만들때 explorer를 특정 판넬에 띄워 지도 같은걸 넣으려고 만들었었는데...

 

그 소스는 내 hdd 날아감과 함께 사라졌는지 찾을 수 없고, 검색해보니 코드프로젝트에 있었네.

 

 

            string align = "LEFT";
            string align1 = align != "LEFT" ? align != "RIGHT" ? "Center" : "Right" : "Left" ;

 

 

3개의 값중 1개로 값을 바꾸고 싶을때....

 

위는 대문자로 된 문자열을 소문자로 바꾸는 역할을 사용하는 것임.

 

응용!!!


string f = "1"; 
1) string selected = ( val != "1" ? "아닌것" : "일" );   요렇게 기본적인 삼항연산자에서!!

string selected = (val != "1" ? (val != "1" ? "아닌것" : "일") : "일");  요렇게 끼워넣고,

string selected = (val != "1" ? (val != "2" ? "아닌것" : "이") : "일"); 수정하면 이제 세가지 중 하나를 선택하게되었음.

 

2)  string selected = (val != "1" ? (val != "2" ? "아닌것" : "이") : "일"); 에서

string selected = (val != "1" ? (val != "2" ? (val != "2" ? "아닌것" : "이") : "이") : "일");  요렇게 또 끼워넣고,

string selected = (val != "1" ? (val != "2" ? (val != "3" ? "아닌것" : "삼") : "이") : "일"); 수정하면 됨..  계속 증가 가능함.

 

여라가지 선택조건에서 원하는 값으로 변경이 가능하게 됨.  괄호는 이해하기 편하게 쓴것이고,

보기어렵게 만들고 싶으면...

 

 

응용 투~!!

            Func<int> AFunc = () => { return (int)'a'; };
            Func<int> BFunc = () => { return (int)'b'; };
            Func<int> CFunc = () => { return (int)'c'; };

            string call = "C";
            int result = (call != "A" ? call != "B" ? CFunc : BFunc : AFunc)();

 

위에서 오류? 다시 생각해보니 3가지중 2가지는 선택이 맞지만 나머지는 두 값이 아니면 선택되는 것이므로..

 # 딱 3중에 1개는 아님...

 

 

 

 

 

 


 
  지금 서버모니터링 프로그램을 구현하는데...

프로세스에서 상태신호를 직접 받을수 있게 설계되었는데....

황당한...일이 발생하였다.


 모니터링 프로그램과 신호를 발생시키는 프로그램간에 IPC 객체 리모팅을 통해서 값전달을 하는데...

이게 일정 시간 쉰 후 다시 시그널을 발송해주면 모니터링 프로그램에서 시그널을 받지 않는다... 

깨워보려고 노력했는데 다 허사로.. ㅠㅠ;..

그래서 생각한게 더미로.. 부 프로그램을 만들어서 이넘을 일정 시간마다 깨워주는 것이다.
 
 이런 경우는 테스트가 더 짜증낭 ㅠㅠ;..

이 부프로그램엔 메인 프로그램을 항상 감시하며.. 이넘 죽으면 같이 죽고,

메인 프로그램은 부 프로그램을 감시하여 죽으면 살려준다!!

종속프로그램...

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

[정규식] Replace~  (0) 2010.09.14
이미지 미리보기~  (0) 2010.08.31
글꼴 폰트 관련 MSDN 링크  (0) 2010.08.10
소수 구하기 소스...  (0) 2010.08.06
[GDI+] Matrix 객체 사용해보기...  (0) 2010.07.27


아 칙칙해보이넹. ㅋㅋ

< 달력 결과물 >


훈스에 달력을 직접 그려보고 싶어하시는 분이 계시는데... 훔... 그냥 이렇게... 후! 

좀 더 시간투자를 하면 완전 바꿨을텐데... 잠깐 짬내본거라.


internal class Day : Label
    {
        public static int _Width = 120;
        public static int _Height = 24;

        public Day()
        {
            this.AutoSize = false;
            this.Width = _Width;
            this.Height = _Height;
            this.MouseHover += new EventHandler(Day_MouseHover);

            this.BorderStyle = BorderStyle.Fixed3D;
        }

        public Day(string text, Point location) : this()
        {
            this.Text = text;
            this.Location = location;
        }

        void Day_MouseHover(object sender, EventArgs e)
        {
            ToolTip tip = new ToolTip();
            {
                tip.Show(this.Text, this, 2000 );
            }
        }
    }

    public class Calendar : UserControl
    {
        int month = DateTime.Now.Month;

        [Category("설정")]
        [Description("해당 월을 입력합니다.")]
        public int Month
        {
            get { return month; }
            set { month = value; Draw(year, month); }
        }
        int year = DateTime.Now.Year;

        [Category("설정")]
        [Description("해당 년을 입력합니다.")]
        public int Year
        {
            get { return year; }
            set { year = value; Draw(year, month);
            }
        }

        public Calendar()
        {
            this.BorderStyle = BorderStyle.FixedSingle;
            Draw(year, month);
        }

        void Draw(int year, int month)
        {
            int heighttotal = 0;
            int widthtotal = 0;
            this.Controls.Clear();
            DateTime date = new DateTime(year, month, 1); // 해당년월에 1일.

            int totalDay = DateTime.DaysInMonth(year, month);

            string[] dayofweek = Enum.GetNames(typeof(DayOfWeek));

            for (int i = 0; i < dayofweek.Length; i++)
            {
                Day weekctrl = new Day(dayofweek[i].Substring(0, 3), new Point(i * Day._Width, 0));
                this.Controls.Add(weekctrl);

                if ((i % 7 )== (int)DayOfWeek.Saturday) // 토요일
                    weekctrl.ForeColor = Color.Blue;
                else if ((i % 7 ) == (int)DayOfWeek.Sunday) // 일요일
                    weekctrl.ForeColor = Color.Red;

                widthtotal += Day._Width;
            }

            int y = 1;
            heighttotal += Day._Height;

            for (int day = 1 - (int)date.DayOfWeek; day <= totalDay; day++)
            {
                Day dayCtrl = new Day();

                dayCtrl.Location = new Point(((day + (int)date.DayOfWeek) % 7) * Day._Width, y * Day._Height);

                //설정
                if ((day + (int)date.DayOfWeek) % 7 == (int)DayOfWeek.Saturday ) // 토요일
                    dayCtrl.ForeColor = Color.Blue;
                else if ((day + (int)date.DayOfWeek) % 7 == (int)DayOfWeek.Sunday) // 일요일
                    dayCtrl.ForeColor = Color.Red;

                if (day <= 0)
                    dayCtrl.ResetText();
                else
                {
                    if (day == DateTime.Now.Day && year == DateTime.Now.Year && month == DateTime.Now.Month) // 오늘 날짜 표시
                    {
                        dayCtrl.Font = new Font(dayCtrl.Font.FontFamily, dayCtrl.Font.Size, FontStyle.Bold);
                    }

                    dayCtrl.Text = day.ToString();
                }
                this.Controls.Add(dayCtrl);
                if ((int)DayOfWeek.Saturday  == (day + (int)date.DayOfWeek) % 7)
                {
                    y++;
                    heighttotal += Day._Height;
                };// 다음주~ 로 넘어가는 부분   DayofWeek 요일 열거형
            }
            heighttotal += Day._Height;
            this.Height = heighttotal + 2;
            this.Width = widthtotal;
        }
   
    }


 -> TextBox 2개 , 버튼 1개
 
  변환 대상 문자열 : "<div>나&너&우리</div>"

  음 훈스에 올렸는데 더 간단한것이..

소류님 글...
01. 참조에 System.Web을 추가합니다.
02. MessageBox.Show(System.Web.HttpUtility.HtmlEncode("<>&"));


// 이하 소스~~~ 

    private void button1_Click(object sender, EventArgs e)
        {
            string pttr = "<|&|>";
            Regex rx = new Regex(pttr);

            this.textBox2.Text = rx.Replace(this.textBox1.Text, new MatchEvaluator(ReplaceString));

        }

        //http://msdn.microsoft.com/en-us/library/cft8645c.aspx
        static string ReplaceString(Match m)
        {
            string mString = m.ToString();

            switch (mString)
            {
                case "<":
                    mString = "&lt;";
                    break;
                case ">":
                    mString = "&gt;";
                    break;
                case "&":
                    mString = "&amp;";
                    break;

            }

            return mString;
       
        }

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

IPC... 리모트 객체 수명이 5~6분?  (0) 2011.06.24
이미지 미리보기~  (0) 2010.08.31
글꼴 폰트 관련 MSDN 링크  (0) 2010.08.10
소수 구하기 소스...  (0) 2010.08.06
[GDI+] Matrix 객체 사용해보기...  (0) 2010.07.27




음 소스는 이미지 사이즈에 따라 조금 우측 픽쳐박스랑 싱크가 안맞기도 한데...

이건 이미지pixel값 가져올때 좌표계산이 살짝!!! 미스 나는것 같다..

머 그냥 쓸것도 아닌 구현해본정도니... 넘어감..

훈스 C# 질문게시판에 비슷한 게시글이 올라와서 구현해봤음.

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

IPC... 리모트 객체 수명이 5~6분?  (0) 2011.06.24
[정규식] Replace~  (0) 2010.09.14
글꼴 폰트 관련 MSDN 링크  (0) 2010.08.10
소수 구하기 소스...  (0) 2010.08.06
[GDI+] Matrix 객체 사용해보기...  (0) 2010.07.27


http://msdn.microsoft.com/ko-kr/library/a3a2bads(VS.90).aspx

Windows/Font 폴더가 아닌 다른 위치에 폰트파일을 읽어서 사용할수 있는가? 라는 질문이 훈스 게시판에 올라왔기에
잠깐 뒤져보다가 찾았다.

privateFontCollection 이란 객체가 있고
AddFontFile( "파일경로" ); 를 통해 추가해서 사용할 수 가 있다.
 
그리고 지난번에 Text 관련해서 라인 번호 넣는 처리 할때 폰트별 라인 공백이라든가 위치값에 필요한 인자값들에 대한 정보도 Font.FontFamily 의 메서드로 지원이 되는것을 확인하였다.  

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

[정규식] Replace~  (0) 2010.09.14
이미지 미리보기~  (0) 2010.08.31
소수 구하기 소스...  (0) 2010.08.06
[GDI+] Matrix 객체 사용해보기...  (0) 2010.07.27
IFormattable  (0) 2010.07.15