소수 구하기 소스...
다음 닷넷 카페에서 소수구하기 2~ 30000 내의 소수 구하기 타임어택을 해본다고 하기에... 나도 한번 해봤다
if와 continue가 소비시간을 그렇게 먹을줄 몰랐넹...
추가하면 할수록 느려지다뉭...
bool print = true;
for (short i = 2; i < 30000 ; i++){
for (short j = 2; j < i ; j++){
if (i % j == 0){
print = false;break;
}
}
if (print == true){
Console.WriteLine( i.ToString());
}
print = true;
}
TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - dt);
MessageBox.Show( ts.ToString() );
VS2005 , CPU : 쿼드 Q8300 , 램 : 4G, OS : XP
이게 가장 빠른 시간이 0.4218750 초이답... 0.4375000...
할때마다 다른데...
릴리즈로 하면 0.1초 빨라짐.
추가 : ...
워... 2~3만이 아니라 2부터 소수 3만개였다.
3만개 띠웠더니 8초 좀 안되넹..
다른 방법을 찾아봤더니 제곱근 이용하는 방법이 있었다.
//제곱근을 이용하여 체크. http://hisjournal.net/blog/128
bool CheckByRoot(int num){
int rootNum = (int)Math.Sqrt((double)num);
int div = 0;
bool value = false;
for(div = rootNum; num % div != 0; div--);
if(div == 1) value = true;
else value = false;
return value;
/*http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Board&no=8479
"모든 정수는 대칭하는 두수의 곱으로 나타낼수 있다"의 특성을 이용해
연산시간을 획기적으로 줄였습니다 -_-;;
여기서는 두 정수의 곱으로만 나타냈지만 실제로는 실수로도 가능합니다.
3루트3 * 2루트3 로도 나타낼수 있죠.
하기위해서는 대칭되어지는 점[입력값의 루트값 즉 sqrt()함수를 이용한 결과값]
까지만 연산을 해주면 된다는 결론이 나옵니다.
내고 for문의 범위를 이 변수의 값까지로 한정시켰습니다.
정수의 소수확인시 1초도 안걸립니다.....
다.
}
이거 적용해도 ... 그닥.. 0.0625초는 안나온다.
소인수분해를 이용해서 소스를 작성했으나... 실패했다.
이유인즉 소수를 찾기위해 수를 소수로 인수분해하려면 소수값을 가지고 있어야 하는데 꾀나 많은 소수들이 있어야 한다는... 벽에 부딪혔다. 30개를 가지고 131까지도 계산 못한다..
int CheckBy(int num)
{
/*소인수분해 .
소인수분해를 할때는 가장 작은 소수부터 나누는게 좋습니다.
int[] primeNum = new int[] {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127};
List<int> ar = new List<int>();
int primeIndex = 0;
int TempValue = 0;
int modTempValue = 0;
int primeCount = 0;
TempValue = num;
do
{
if( TempValue == 1 )
{
ar.Add(TempValue);
break;
}
{
ar.Add(TempValue);
TempValue = TempValue / primeNum[primeIndex];
}
else
{
primeIndex++;
}
} while (true); // 3개부터는 ~
return ar.Count;
}
줸장 ㅡ,.ㅡ;;
0.0625초는 대체 어떻게 나온거쥐?
실패했따 ㅡ.,ㅡ;;; 슬프다..
추가
카페에 갔더니 소스가 올라왔다... 봤더니 ~~ 와!! 대박!...
출력까지 포함시켜도 2초 정도 나온다.
제곱근과 소인수분해를 복합적으로 적용시켜놓은 소스였다...
감탄뿐이 안나옴... 알고리즘 공부 좀 다시 해야겠다.
'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글
이미지 미리보기~ (0) | 2010.08.31 |
---|---|
글꼴 폰트 관련 MSDN 링크 (0) | 2010.08.10 |
[GDI+] Matrix 객체 사용해보기... (0) | 2010.07.27 |
IFormattable (0) | 2010.07.15 |
트리노드 검색해서 확장하기... (0) | 2010.03.17 |
[GDI+] Matrix 객체 사용해보기...
나에게 행렬이란? 계산방법이나 결과값을 구하는건 알겠는데... 그래픽에 막상 적용해놓고도 이게 뭔가... 싶은것?
역시 수학 기초가 딸리면 멍때리는건 시간문제얌 ㅡ.,ㅡ;;;
얼마전 훈스에 올라온 행렬 구하는 객체가 있는가에 대해 검색좀 해보니 Matrix란게 있었는데...
또 마침 별그리는것... 선 이동시하는것등... 갑자기 또 관심종목이 ㅡ.,ㅡ;;;
오늘 저녁엔 Matrix를 가지고 놀아보자 해서 별그리는데 써보기로 했다.
그럼 이 Matrix는 뭐하는 놈인고 하니 MSDN 에 보니 이 놈이 좌표변환 하는데 쓰이는 놈이었다.
3D 구현때보다는 머 나름 편했다. 3D는 아직도 이해 불가..( 절두체 ㅡ.,ㅡ;; )
2D로 별을 그린다고 했을때
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 = (angle + i) * Math.PI / 180d;
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);
g.DrawEllipse(Pens.Blue, p.X - 5, p.Y - 5, 10, 10);
}
말할것도 없이 이거답... angle은 회전각인데.. 별을 빙글~빙글~ 돌려봤다..
이게 오히려 나에겐 이해하기 쉽다...
private void DrawStar(PaintEventArgs e)
{
PointF[] starPointFs = new PointF[6];
int cnt = 0;
double theta = 0f;
for (double i = 0; i <= 720d; i += 144d)
{
theta =( i - 5f) * Math.PI / 180d;
starPointFs[cnt] = new PointF((float)Math.Cos(theta), (float)Math.Sin(theta));
cnt++;
}
e.Graphics.DrawLines(Pens.Red, starPointFs);
//Matrix를 이용한 좌표변환 그리기...
Matrix mx = new Matrix(1f, 0f, 0f, 1f, this.Width/2, this.Height/2);
mx.Scale(100f, 100f);
mx.Rotate((float)angle);
mx.TransformPoints(starPointFs);
e.Graphics.DrawLines(Pens.Black, starPointFs);
}
Matrix의 기본 파라미터값( Sx , Rx, Ry, Sy, Dx, Dy ) 임.
Rx, 나 Ry를 값을 주면 왜곡되는데... 왜그런지 모르겠넹... 쩝.
매트릭스로 구현한 소스이다.
기초 메트릭스를 생성하고 여기에 크기변환, 회전값을 주고
별의 각 점좌표를 주고 변환 한다!
그리고 그려주면 별이 그려진다.
소스상에 i - 5f 는 두개의 별을 동시에 그리면 위상이 같아서 겹치므로 위상차를 주었다.
간단하게나마 매트릭스를 그려보았다.
음 어따 써먹쥐????????????????????????????? 이걸 왜했을까?
# 실제 이미지는 타이머로 빙글 빙글 돌리고 있다....
'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글
글꼴 폰트 관련 MSDN 링크 (0) | 2010.08.10 |
---|---|
소수 구하기 소스... (0) | 2010.08.06 |
IFormattable (0) | 2010.07.15 |
트리노드 검색해서 확장하기... (0) | 2010.03.17 |
목록 로테이션??? (0) | 2010.03.16 |
그림판? 그림 이동? 별그리기...
전에 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 |
IFormattable
SubComboBoxClass sb = new SubComboBoxClass();
sb.DataCode = "7001";
sb.Value = "V";
object obj = sb;
this.Text = string.Format("{0:KEY}", obj);
위처럼 따로 정의한 객체가 특정 Format 형식을 지원하고자 할때 사용 할 수 있다.
가끔 다른 인터페이스랑 헷갈릴때가 있어서 기록해둔다.
internal class SubComboBoxClass : IFormattable
{
public string Name { get; set; }
public string Value { get; set; }
public string DataCode { get; set; }
public override string ToString()
{
return ToString(null, null);
}
#region IFormattable 멤버
public string ToString(string format, IFormatProvider formatProvider)
{
if (format == "KEY")
{
return Value + DataCode;
}
return Name + ":" + DataCode + "[" + Value + "]";
}
#endregion
}
'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글
소수 구하기 소스... (0) | 2010.08.06 |
---|---|
[GDI+] Matrix 객체 사용해보기... (0) | 2010.07.27 |
트리노드 검색해서 확장하기... (0) | 2010.03.17 |
목록 로테이션??? (0) | 2010.03.16 |
사용자 정의 문자열 포멧 지정하기 ( IFormatProvider, ICustomFormatter ) (0) | 2009.08.17 |
런타임상에서의 컨트롤 사이즈 드래그!!!
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 |
MDI 폼 스크롤바 없애기
폼을 MDI 컨테이너로 지정하고 폼을 MDI로 넣으면
MDIClient가 추가가 되는데 위치는
폼.Controls[ 폼.Controls.Count -1 ] 위치에 MDIClient 라는 컨트롤이 추가되어있는것을 확인할수 있다.
이것에 Scroll을 비활성 시키는 방법은 딱 한가지뿐이었다.( 내가 발견한 방법 )
public Form1()
{
InitializeComponent();
AutoScrollMinSize = new Size(int.MaxValue, int.MaxValue);
}
이렇게 해주면 내부 MDI 폼을 화면 끝넘어서 이동시켜도 스크롤이 안생긴다.
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
타이머 구현... (0) | 2010.04.08 |
---|---|
속성에 UIEditor 달기( PropertyGrid 이용 ) (0) | 2010.03.25 |
폼에 파일 드래그앤드랍 하기 (0) | 2010.03.25 |
목록 - 로테이션 응용컨트롤... (0) | 2010.03.19 |
리스트 박스를 구현... (2) | 2010.03.12 |
폼에 파일 드래그앤드랍 하기
플러그인 메인을 만들면서 플러그인 아이템(dll)파일을 등록하기위해
OpenFileDialog를 사용하여 로딩하기도 했지만.
파일 드래그앤 드랍기능도 추가하였다.
방법은 간단하지만... 기록해둔다..
해당 폼에 AllowDrop = true를 설정하고
두개의 이벤트를 지정한다.
private void Form1_DragDrop(object sender, DragEventArgs e)
{
this.Text = Path.GetFullPath( ((string[])(e.Data.GetData(e.Data.GetFormats()[7])))[0].ToString());
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Link;
}
꼴랑 이게 끝이다.
주의 할것은.
((string[])(e.Data.GetData(e.Data.GetFormats()[7])))[0].ToString()
이구분에 인덱스 처리부분이다.
위 이미지는 GetData에 넣어주는 Format 값에 대한것이다.
현재는 [7] 이라고 넣어주었지만 FileName 이라 넣어주는것이 좋을듯 하다.
노트북(Win7)은 8가지가 나오지만 데크탑(XP)은 7개만 나온다.
직접 FileName을 넣는것이 나을듯 하다.
파일명을 얻어왔으니 이제 파일을 컨트롤하면 된다.
플러그인 모듈을 가지고 직접 Dll을 특정폴더로 이동시키고 xml목록에 업데이트 하는 동작구현시 아주 잘된다.
여기에 가미된것은 Path객체로 FullPath를 얻어오는부분일 뿐..
모듈을 만들때 그냥 썼더니 긴 경로명은 ~ 처리가 된다. 물론 파일 경로에 접근하는데는 무리가 없으나
파일을 이동시켰을때 ~로 바뀌어버리므로 의도적으로 바꾸는게 아니라면 주의 해야겠다.
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
속성에 UIEditor 달기( PropertyGrid 이용 ) (0) | 2010.03.25 |
---|---|
MDI 폼 스크롤바 없애기 (0) | 2010.03.25 |
목록 - 로테이션 응용컨트롤... (0) | 2010.03.19 |
리스트 박스를 구현... (2) | 2010.03.12 |
트레이 구현하기... (0) | 2010.02.23 |