대리자를 잘못 사용해서 나타난 버그..
JSFW.Mockup 프로그램을 사용하다가 예외가 뜨길래 디버깅을 해봤다.
전달되어야 할 대리자가 null 이었다. 왜지?
처음엔 if문으로 null체크하고 넘어갔는데, 왠지 모를 찝찝함으로 계속 테스트를 하면서 왜 null 이 되는지 찾았다.
mockup의 속성에서 Editor를 띄워서 컬럼목록으로 컨트롤을 생성하는 창을 띄웠다.
그리고 이 창에서 컨트롤을 생성하여 드래그 앤 드랍으로 원하는 위치에 떨어뜨린다.
그리고 떨어뜨린 컨트롤을 선택했을때
1. 속성창에 해당 컨트롤의 속성들을 보여준다.
2. 선택된 컨트롤을 지정해둔다.
- delete 키를 눌렀을때 해당 컨트롤 삭제 처리해야 하기때문에...
근데 여기서 문제가... 창에서 생성된 컨트롤에 이벤트를 부여할때
판넬.대리자를 넘겨준다. => 기본Editor 객체 => 생성창 => 생성된 컨트롤.대리자 = 넘어온.대리자;
여기서 배치가 끝나고 생성창을 닫으면! 실제 컨트롤.대리자 에 할당되어 있던 넘어온.대리자(판넬.대리자)가 null값이 되었다.
그래서 선택된 컨트롤로 지정이 안되어 삭제가 안되고 이전에 이벤트를 제대로 탄 객체가 선택되어진채 있다가 delete 누르면 그게 날아간다.
이걸 기본Editor에서 컨트롤을 생성하여 드래그 앤 드랍 처리를 하고 이벤트도 여기서 붙인다.
그리고 이 메서드를 대리자를 통해서 생성창에 넘기고, 생성된 컨트롤.대리자에 또 넘겨준다.
실제 컨트롤을 드래그를 시작하면 원래 Editor개체에서 생성을 하여 직접 전달하게 된다.
창이 닫혀도 이벤트는 계속 유지되기 때문에... 정상동작되는 것을 확인하였다.
글로 쓰니 ...alskdjflasjdflaj
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
그룹 박스 그리기 ( 객체 다중 선택 ) (0) | 2016.08.07 |
---|---|
Scroll 같은? 눈속임?? (0) | 2016.07.22 |
Mover] 구형 신형. (0) | 2016.07.19 |
다른 프로그램을 내 프로그램 판넬에 띄우는 방법 (0) | 2016.02.23 |
3가지중 1개로 선택해서 바꿈] 더블 삼항연산자 (0) | 2013.08.01 |
Mover] 구형 신형.
추가... 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 = 해당컨트롤;
이렇게 해주면 위 그림처럼 착! 달라붙는다.
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
Scroll 같은? 눈속임?? (0) | 2016.07.22 |
---|---|
대리자를 잘못 사용해서 나타난 버그.. (0) | 2016.07.20 |
다른 프로그램을 내 프로그램 판넬에 띄우는 방법 (0) | 2016.02.23 |
3가지중 1개로 선택해서 바꿈] 더블 삼항연산자 (0) | 2013.08.01 |
[ C# WinForm ] 음.. 달력!! (0) | 2011.03.24 |
다른 프로그램을 내 프로그램 판넬에 띄우는 방법
http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project
다른 프로그램을 내 프로그램 판넬에 띄우는 방법!
이건 예전 지진통보시스템 만들때 explorer를 특정 판넬에 띄워 지도 같은걸 넣으려고 만들었었는데...
그 소스는 내 hdd 날아감과 함께 사라졌는지 찾을 수 없고, 검색해보니 코드프로젝트에 있었네.
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
대리자를 잘못 사용해서 나타난 버그.. (0) | 2016.07.20 |
---|---|
Mover] 구형 신형. (0) | 2016.07.19 |
3가지중 1개로 선택해서 바꿈] 더블 삼항연산자 (0) | 2013.08.01 |
[ C# WinForm ] 음.. 달력!! (0) | 2011.03.24 |
그림판? 그림 이동? 별그리기... (2) | 2010.07.23 |
3가지중 1개로 선택해서 바꿈] 더블 삼항연산자
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개는 아님...
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
Mover] 구형 신형. (0) | 2016.07.19 |
---|---|
다른 프로그램을 내 프로그램 판넬에 띄우는 방법 (0) | 2016.02.23 |
[ C# WinForm ] 음.. 달력!! (0) | 2011.03.24 |
그림판? 그림 이동? 별그리기... (2) | 2010.07.23 |
런타임상에서의 컨트롤 사이즈 드래그!!! (0) | 2010.06.10 |
[ C# WinForm ] 음.. 달력!!
아 칙칙해보이넹. ㅋㅋ
< 달력 결과물 >
훈스에 달력을 직접 그려보고 싶어하시는 분이 계시는데... 훔... 그냥 이렇게... 후!
좀 더 시간투자를 하면 완전 바꿨을텐데... 잠깐 짬내본거라.
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;
}
}
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
다른 프로그램을 내 프로그램 판넬에 띄우는 방법 (0) | 2016.02.23 |
---|---|
3가지중 1개로 선택해서 바꿈] 더블 삼항연산자 (0) | 2013.08.01 |
그림판? 그림 이동? 별그리기... (2) | 2010.07.23 |
런타임상에서의 컨트롤 사이즈 드래그!!! (0) | 2010.06.10 |
서버 - 클라이언트 ... (0) | 2010.05.08 |
그림판? 그림 이동? 별그리기...
전에 SBS 자막 프로젝트 할때...
당시 그쪽 인력들은 죄다 그래픽 관련인지라 더군다나 C++을 아주 아주 능숙하게 사용하는 사람들이었는데...
정말 잘 만들던데...
오늘 훈스에 별그리기, 그린 선을 클릭해서 이동하는 방법... 들에 대한 문의가 올라왔다.
그 동안 나도 공부도 했다 싶어서 도전... 별과 함게 딱 3시간 반,,, 별은 그닥 오래 안걸렸는데...
선 이동하는게 쉽지 않군... 그리는것 부터 해서 이동하는데 걸린 작업시간이 3시간. ( 뭐 나름 선방했다 치자.. )
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace makeClass
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 깜빡거릴것 같은....
DoubleBuffered = true;
}
/// <summary>
/// 자료구조( 점과 영역 저장)
/// </summary>
SortedList<string, PointList> Points = new SortedList<string, PointList>();
protected override void OnPaint(PaintEventArgs e)
{
// 선택시 활성화
if (_Selected)
{
e.Graphics.DrawRectangle(Pens.RoyalBlue, Rectangle.Truncate(Points[SelectKey].Region));
}
// 저장된 점 모두 그림.
foreach (KeyValuePair<string, PointList > p1 in Points)
{
for (int i = 0; i < p1.Value.Points.Count - 1; i++)
{
e.Graphics.DrawLine(Pens.Red, p1.Value.Points[i], p1.Value.Points[i + 1]);
}
}
base.OnPaint(e);
}
//마우스 눌렸을때 ( 그리기 모드 )
bool _MouseDown = false;
//선택되었을때 ( 이동 모드 )
bool _Selected = false;
// 선택키
string SelectKey = "";
#region 그리기 & 이동에 필요한 변수
PointF pt = new PointF();
List<PointF> tmp = null;
RectangleF rct; //= new Rectangle(0,0,0,0);
#endregion
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) // 그리기
{
rct = new RectangleF(0,0,0,0);
pt = rct.Location = e.Location;
tmp = new List<PointF>();
tmp.Add(e.Location);
_MouseDown = true;
}
else if ( e.Button == MouseButtons.Right ) // 이동하기
{
pt = e.Location;
foreach (KeyValuePair<string, PointList> kv in Points)
{
_Selected = kv.Value.Region.Contains(e.Location);
if (_Selected)
{
SelectKey = kv.Key;
tmp = kv.Value.Points;
rct = kv.Value.Region;
break;
}
}
}
base.OnMouseDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if ( _MouseDown && tmp != null )
{
tmp.Add(e.Location);
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
g.DrawLines(Pens.Red, tmp.ToArray() ); // 그리는걸 보여주기 위해..
}
}
else if (_Selected && tmp != null)
{
tmp = Points[SelectKey].Points;
PointF tm;
// 포인트 스왑
for (int idx = 0; idx < tmp.Count; idx++ )
{
tm = tmp[idx];
tm.X += e.Location.X - pt.X;
tm.Y += e.Location.Y - pt.Y;
tmp[idx] = tm;
}
// 영역 스왑
rct = Points[SelectKey].Region;
rct.X += e.Location.X - pt.X;
rct.Y += e.Location.Y - pt.Y;
Points[SelectKey].Region = rct;
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
// 이동시 잔상 제거 및 다시 그리기.
Invalidate( Rectangle.Truncate( new RectangleF( rct.X - 100f, rct.Y - 100f, rct.Width + 200f, rct.Height + 200f )), true);
}
pt = e.Location;
}
// base.OnMouseMove(e);
}
/// <summary>
/// 자료구조 키값. ( 생성시... Object 구분값으로 씀)
/// </summary>
int PointKey = 0;
protected override void OnMouseUp(MouseEventArgs e)
{
if (tmp != null)
{
if (_MouseDown == true)
{
tmp.Add(e.Location);
float maxX = 0;
float maxY = 0;
foreach (PointF pf in tmp)
{
if (rct.X > pf.X) rct.X = pf.X;
if (rct.Y > pf.Y) rct.Y = pf.Y;
if (maxX < pf.X) maxX = pf.X;
if (maxY < pf.Y) maxY = pf.Y;
}
rct.Width = maxX - rct.X;
rct.Height = maxY - rct.Y;
Points.Add((PointKey++).ToString(), new PointList(rct, tmp));
}
// 해제
_Selected = false;
_MouseDown = false;
Invalidate();
tmp = null;
}
base.OnMouseUp(e);
}
// 별그리기...
private void DrawStar(Graphics g, double r, PointF p)
{
PointF[] ps = new PointF[6];
double RadianTheta = 0d;
int cnt = 0;
for (double i = 0; i <= 720d; i += 144d )
{
RadianTheta = i * Math.PI / 180 ;
ps[ cnt ] = new PointF( p.X + (float)( r * 1d * Math.Cos( RadianTheta )) ,
p.Y + (float)( r * 1d * Math.Sin( RadianTheta ) ) );
cnt ++;
}
g.DrawLines(Pens.Red, ps);
}
// 자료구조.
public class PointList
{
public PointList(RectangleF rt, List<PointF> lp )
{
region = rt; points = lp;
}
RectangleF region = new RectangleF();
public RectangleF Region
{
get { return region; }
set { region = value; }
}
List<PointF> points = new List<PointF>();
public List<PointF> Points
{
get { return points; }
set { points = value; }
}
}
}
}
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
3가지중 1개로 선택해서 바꿈] 더블 삼항연산자 (0) | 2013.08.01 |
---|---|
[ C# WinForm ] 음.. 달력!! (0) | 2011.03.24 |
런타임상에서의 컨트롤 사이즈 드래그!!! (0) | 2010.06.10 |
서버 - 클라이언트 ... (0) | 2010.05.08 |
타이머 구현... (0) | 2010.04.08 |
런타임상에서의 컨트롤 사이즈 드래그!!!
VS 디자이너상에서 디자인 타임에 컨트롤 사이즈를 변경 할수 있는 놈을 찾아 msdn도 뒤지고 검색도 해보고 했는데 마땅한넘을 못찾아서...
비슷한놈을 만들었다.
jsFW20으로 만들려던게 설계하다보니 디자이너가 필요해서 ㅠㅠ;...
그래서 이넘을 만들었다.
좌표계산이 참 머같네...
PointToClient, PointToScreen 요 두놈이 애매하다.
내가 정독을 못하다보니 msdn을 읽어도 무슨뜻인지 감이 안올때가 ㅠㅠ;...
아무튼 구현에 성공했고 이제 계획대로 차근 차근 진행하면 된다.
간단히 스샷만 떴다.
대상을 클릭하면 사이즈조절할수 있는놈이 위치된다.
드래그 하면 위치만큼 컨트롤이 조절된다.
다른 대상을 클릭시 이동한다.
같은대상이면 사라진다.
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
[ C# WinForm ] 음.. 달력!! (0) | 2011.03.24 |
---|---|
그림판? 그림 이동? 별그리기... (2) | 2010.07.23 |
서버 - 클라이언트 ... (0) | 2010.05.08 |
타이머 구현... (0) | 2010.04.08 |
속성에 UIEditor 달기( PropertyGrid 이용 ) (0) | 2010.03.25 |
서버 - 클라이언트 ...
새로 만든 서버와 클라이언트 모델이다.
스샷만 넣는다..
중요한 컨셉은. 데이타 전송은 표준데이타를 사용하고 실제 사용하는 데이타를 분리해냈다.
서버와 클라이언트간 기본 통신메세지는 표준으로 정의 하고.
실제 응용프로그램에서 사용되는 데이타 모델을 패킷에서 분리해냈다.
이는 응용프로그램에서 사용되는 데이타 모델을 필요에 의해 바꿀수 있다.
위에 사용되는 데이타는 기본데이타(CommPack) + 응용데이타(ChattMsg)를 더해서 패킷을 만들어
Tcp/Ip 통신으로 보낸다.
전에 만들어두었던 모델에 전부터 하려던걸 추가했다.
ChattMsg msg = new ChattMsg ();
msg.ChattMessage = this.textBox2.Text;
CommPack pack = new CommPack ();
pack.CommandCode = CommPack.__DATATRANS;
pack.FromID = client.ID;
pack.ToID = client.ID;
pack.Set_TransData(msg); // 데이타를 표준 패킷에 싣는다!
client.Send(pack);
this.textBox2.Clear();
--> 데이타를 보내는 것임.
한글은 어려웡... 실어나른다. 싣다. 암튼... 아래 사전을 찾아보았다.
싣다?
http://krdic.daum.net/dickr/contents.do?offset=A024243500&query1=A024243500#A024243500
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
그림판? 그림 이동? 별그리기... (2) | 2010.07.23 |
---|---|
런타임상에서의 컨트롤 사이즈 드래그!!! (0) | 2010.06.10 |
타이머 구현... (0) | 2010.04.08 |
속성에 UIEditor 달기( PropertyGrid 이용 ) (0) | 2010.03.25 |
MDI 폼 스크롤바 없애기 (0) | 2010.03.25 |
타이머 구현...
훈스 게시판에 힘들게 타이머를 구현하시는 분이 계셔서 퇴근하고 잠깐 머리도 식힐겸... 1시간가량 작성해보았다.
Clock개념을 이용해서 true 가 들어올때마다 계수를 하여 0, 0 , 0 이 될때까지... 카운트를 한다.
카운트 완료시 백그라운드는 색이 바뀐다.
신호 제어를 통해 전체 클럭을 주고 안주고 한다.
머 그닥 달건 없고... 소스에 주석!!을 통해 추상화 부터 구현까지 어떤 과정을 거쳤는지 간단히 써놓았다.
/*
타이머를 우선 추상화 합니다.
*
* Reset ();
* Setting( 시간)
* Start(); -> Pause();
* Stop();
*
* 기본적인 타이머 동작을 우선 살펴보면.
*
* 지정된 시간을 역카운트 해서 00: 00: 00이 되면 자동 멈추고 알람발생
* 지정된 시간을 역카운트 중 Pause상태가 되면 Reset() Or Start() or Stop() 가능
*
* 조금더... 생각해서 실제로 디지탈적으로 구현하기 위해 클럭 개념을 이용합니다.
*
* Tick당 계수되는걸로 구현합니다. 우선 간단히 추상화가 되었고
*
* 이에 맞춰 이 타이머에 필요한 부품들을 생각해봅니다.
*
* 1. 기본적인 디스플레이 ( 라벨 또는 TextBox ) : 입력가능하여야 하므로 Textbox로... 선정.
* 2 . 타이머별로 이름붙이는건 옵션으로 해서 라벨하나더.
* 3. 클럭을 받아들일 인터페이스
* 4. 이 인터페이스에 부탁될 이벤트... or 내부 메서드
* 5. 타이머가 구동중인지 알아볼 상태플래그.
*
* 대충 요약 완료!
*/
주석에 맞춰 코딩을 시작해서 1시간가량에 끝났다.
쩝!!
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
런타임상에서의 컨트롤 사이즈 드래그!!! (0) | 2010.06.10 |
---|---|
서버 - 클라이언트 ... (0) | 2010.05.08 |
속성에 UIEditor 달기( PropertyGrid 이용 ) (0) | 2010.03.25 |
MDI 폼 스크롤바 없애기 (0) | 2010.03.25 |
폼에 파일 드래그앤드랍 하기 (0) | 2010.03.25 |
속성에 UIEditor 달기( PropertyGrid 이용 )
PropertyGrid를 처음 접한건 와이즈엠( 처음 c#을 시작한 곳) 시절에 이사님이 사용하시던거였는데
뭔가 찾아보라고 하셨는데... 당시 프로그래밍 자체가 첨이던 시절 영어도 안되고.. 이래저래... C#문법도 겨우 공부하고 있던 시절이라... 사설은 접고...
클래스 폼에 속성을 하나 넣고 이를 변경할 UI를 구성하는 폼을 붙여넣어보자!!
http://www.gisdeveloper.co.kr/197 참고 블로그 [ 설명도 기가막히게 써있다 ]
요새 만드는 프레임웍에 폼 기능중 하나로 속성에 스타트포지션을 화면을 9개로 나누어 임의로 구석에 붙이는 걸 하려고 한다.
그래서 데모용으로 만들었다.
위 링크 들어가서 보면 잘 설명되있으므로 소스 설명은 없다.
이제 나름 소스를 봐도 이해가 되는건... 그나마 공부를 쉬지 않고 해서 아닐까... 앞으로 3.5도 해야되는데... 4.0이 나온다는데...
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
서버 - 클라이언트 ... (0) | 2010.05.08 |
---|---|
타이머 구현... (0) | 2010.04.08 |
MDI 폼 스크롤바 없애기 (0) | 2010.03.25 |
폼에 파일 드래그앤드랍 하기 (0) | 2010.03.25 |
목록 - 로테이션 응용컨트롤... (0) | 2010.03.19 |