검색결과 리스트
전체에 해당되는 글 1012건
- 2012.04.11 [.Net] 가비지 수집 모니터링
- 2012.04.10 [.Net] CLR Inside Out: 메모리 문제 조사
- 2012.04.10 [.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic)
- 2012.04.08 [XtraGrid] How to make my grid columns read-only
- 2012.04.06 [C#] Assembly Version Loading
- 2012.04.06 [Util] Ping Test Easy
- 2012.04.06 [XtraGrid] Checkbox 구현하기 1
- 2012.04.06 [C#] VS 2008 서식 자동 해제
- 2012.04.05 [XtraGrid] Fixed Columns
- 2012.04.04 [MSSQL] SQL Server Management Studio 단축키
- 2012.04.03 [C#] log4net
- 2012.03.28 [XtraGrid] DevExpress XtraGrid
- 2012.03.26 [C#] vshosting.exe 가 뭘까요?
- 2012.03.25 [C#] Implementing a Database Factory Pattern in C# ASP .NET
- 2012.03.22 [C#] Dynamic Method Call With Out Parameter
- 2012.03.18 [C#] .Net Control.Invoke
- 2012.03.16 [Spring.Net] Spring.NET_guide_ensoa_v.0.2.pdf
- 2012.03.15 [C#] .Net 탐색기, Drag And Drop 구현
- 2012.03.15 [즐겨찾기] C# TreeView MultiSelect
- 2012.03.14 [SourceGrid] 즐겨찾기
- 2012.03.12 [C#] internal 지정자
- 2012.03.10 [즐겨찾기] 무료서적 Inside C# 2nd
- 2012.03.10 [Visual Studio 2005] Visual Studio 2005 에서 ildasm.exe 위치
- 2012.03.09 [.Net] System.CodeDom namespace
- 2012.03.08 [Visual Studio] 마법사 만들기
- 2012.03.08 [즐겨찾기] .Net Install
- 2012.03.06 [iOS] iOS Simulator 위치
- 2012.03.06 [iOS] About View Controllers
- 2012.03.04 [iOS] About Events in iOS
- 2012.03.04 [iOS] json parser for Objective-c
글
CLR Profiler : http://www.microsoft.com/download/en/details.aspx?id=13382
http://www.microsoft.com/downloads/ko-kr/details.aspx?familyid=fd02c7d6-5306-41f2-a1be-b7dcb74c9c0b
* PerfMon.exe
위치 : C:\Windows\System32\PerfMon.exe
'.Net > .Net' 카테고리의 다른 글
[.Net] IPC (0) | 2012.04.16 |
---|---|
[.Net] 관리코드에서 메모리 누수 및 방지 (0) | 2012.04.11 |
[.Net] CLR Inside Out: 메모리 문제 조사 (0) | 2012.04.10 |
[.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic) (0) | 2012.04.10 |
[C#] Implementing a Database Factory Pattern in C# ASP .NET (0) | 2012.03.25 |
트랙백
댓글
글
링크 : http://msdn.microsoft.com/ko-kr/magazine/cc163528.aspx
프로세스의 메모리 사용 조사 : http://msdn.microsoft.com/ko-kr/library/cc438089(v=vs.71).aspx
'.Net > .Net' 카테고리의 다른 글
[.Net] 관리코드에서 메모리 누수 및 방지 (0) | 2012.04.11 |
---|---|
[.Net] 가비지 수집 모니터링 (0) | 2012.04.11 |
[.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic) (0) | 2012.04.10 |
[C#] Implementing a Database Factory Pattern in C# ASP .NET (0) | 2012.03.25 |
[C#] .Net Control.Invoke (0) | 2012.03.18 |
트랙백
댓글
글
링크 : http://msdn.microsoft.com/ko-kr/library/dd465122.aspx
링크 : http://msdn.microsoft.com/ko-kr/library/018hxwa8.aspx
이렇게도 사용할수 있군요. 간단한 메소드는 델리게이트 선언하지 않고 바로 사용 할 수 있을듯합니다.
응용 : http://www.devpia.co.kr/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1723&page=11
범용 적으로 사용 하게 만든 클래스 사실 제네릭 인자 3개 더 추가밖에 없습니다.
public static class ControlExt { public static void InvokeIfNeeded(this Control control, Action action) { if ( control.InvokeRequired ) { control.Invoke(action); } else { action(); } } public static void InvokeIfNeeded< T >(this Control control, Action< T > action, T arg) { if ( control.InvokeRequired ) { control.Invoke(action, arg); } else { action(arg); } } public static void InvokeIfNeeded< T1 , T2 >(this Control control, Action< T1 , T2 > action, T1 arg1, T2 arg2) { if ( control.InvokeRequired ) { control.Invoke(action, new object[] {arg1, arg2}); } else { action(arg1, arg2); } } public static void InvokeIfNeeded< T1, T2, T3 >(this Control control, Action< T1, T2, T3 > action, T1 arg1, T2 arg2, T3 arg3) { if ( control.InvokeRequired ) { control.Invoke(action, new object[] { arg1, arg2, arg3 }); } else { action(arg1, arg2, arg3); } } public static void InvokeIfNeeded< T1, T2, T3, T4 >(this Control control, Action< T1, T2, T3, T4 > action, T1 arg1, T2 arg2, T3 arg3, T4 arg4) { if ( control.InvokeRequired ) { control.Invoke(action, new object[] { arg1, arg2, arg3, arg4 }); } else { action(arg1, arg2, arg3, arg4); } } }
'.Net > .Net' 카테고리의 다른 글
[.Net] 가비지 수집 모니터링 (0) | 2012.04.11 |
---|---|
[.Net] CLR Inside Out: 메모리 문제 조사 (0) | 2012.04.10 |
[C#] Implementing a Database Factory Pattern in C# ASP .NET (0) | 2012.03.25 |
[C#] .Net Control.Invoke (0) | 2012.03.18 |
[C#] .Net 탐색기, Drag And Drop 구현 (0) | 2012.03.15 |
트랙백
댓글
글
'.Net > XtraGrid' 카테고리의 다른 글
[XtraGrid] Online Document (0) | 2012.04.13 |
---|---|
[XtraGrid] Copy & Paste 구현 (0) | 2012.04.11 |
[XtraGrid] Checkbox 구현하기 (1) | 2012.04.06 |
[XtraGrid] Fixed Columns (0) | 2012.04.05 |
[XtraGrid] DevExpress XtraGrid (0) | 2012.03.28 |
트랙백
댓글
글
현재 어셈블리 버전을 읽는 방법 이다.
// AssemblyInfo.cs // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로 // 지정되도록 할 수 있습니다. // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("0.5.*")] [assembly: AssemblyFileVersion("0.5.*")] // Test.cs // 현재 실행 프로그램의 어셈플리를 로딩한다. string msg = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); MessageBox.Show("Version=" + msg);
참고로 버전은 Major.Minor.Build.Revision 입니다.
'.Net > C#' 카테고리의 다른 글
[C#] DllImportAttribut 멤버 (0) | 2013.01.04 |
---|---|
[C#] Visual C# 메소드를 비동기로 호출하는 방법 (0) | 2012.04.14 |
[C#] VS 2008 서식 자동 해제 (0) | 2012.04.06 |
[C#] log4net (0) | 2012.04.03 |
[C#] vshosting.exe 가 뭘까요? (0) | 2012.03.26 |
트랙백
댓글
글
'Network' 카테고리의 다른 글
[KT EGG] 스트롱에그 KWD-B2600 (0) | 2012.09.20 |
---|---|
[Ping] KT 핑 테스트 (0) | 2012.06.30 |
아이피 위치 확인 하는 방법 (0) | 2012.02.07 |
hosts 파일 수정 (0) | 2011.09.22 |
유용한 NETSTAT 명령어 (0) | 2008.07.14 |
트랙백
댓글
글
public class GridCheckMarksMultiSelectionHelper { private readonly string markFieldName = "CheckMarkSelection"; protected GridView _view; protected ArrayList selection; protected GridColumn column; protected RepositoryItemCheckEdit edit; protected const int CheckboxIndent = 4; ////// 생성자 /// public GridCheckMarksMultiSelectionHelper() { selection = new ArrayList(); } public GridCheckMarksMultiSelectionHelper(GridView view) : this() { this.View = view; } public GridView View { get { return _view; } set { if (_view != value) { Detach(); Attach(value); } } } public string MarkFieldName { get { return this.markFieldName; } } private bool isMultiSelect = false; public bool IsMultiSelect { get { return this.isMultiSelect; } private set { this.isMultiSelect = value; } } public GridColumn CheckMarkColumn { get { return column; } } public int SelectedCount { get { return selection.Count; } } public object GetSelectedRow(int index) { return selection[index]; } public int GetSelectedIndex(object row) { foreach (object record in selection) if ((record as DataRowView).Row == (row as DataRowView).Row) return selection.IndexOf(record); return selection.IndexOf(row); } public void ClearSelection(GridView view) { selection.Clear(); Invalidate(view); } public void SelectAll(GridView view) { selection.Clear(); // fast (won't work if the grid is filtered) //if(_view.DataSource is ICollection) // selection.AddRange(((ICollection)_view.DataSource)); //else // slow: for (int i = 0; i < view.DataRowCount; i++) selection.Add(view.GetRow(i)); Invalidate(view); } public void SelectGroup(int rowHandle, bool select, GridView view) { if (IsGroupRowSelected(rowHandle, view) && select) return; for (int i = 0; i < view.GetChildRowCount(rowHandle); i++) { int childRowHandle = view.GetChildRowHandle(rowHandle, i); if (view.IsGroupRow(childRowHandle)) SelectGroup(childRowHandle, select, view); else SelectRow(childRowHandle, select, false, view); } Invalidate(view); } void SelectRow(int rowHandle, bool select, bool invalidate, GridView view) { if (IsRowSelected(rowHandle, view) == select) return; object row = view.GetRow(rowHandle); if (select) selection.Add(row); else selection.Remove(row); if (invalidate) { Invalidate(view); } } void SelectRow(object row, bool select, bool invalidate, GridView view) { if (IsRowSelected(row, view) == select) return; if (select) selection.Add(row); else selection.Remove(row); if (invalidate) { Invalidate(view); } } public void SelectRow(int rowHandle, bool select, GridView view) { SelectRow(rowHandle, select, true, view); } public void SelectRow(object row, bool select, GridView view) { SelectRow(row, select, true, view); } public void InvertRowSelection(int rowHandle, GridView view) { if (view.IsDataRow(rowHandle)) { SelectRow(rowHandle, !IsRowSelected(rowHandle, view), view); } if (view.IsGroupRow(rowHandle)) { SelectGroup(rowHandle, !IsGroupRowSelected(rowHandle, view), view); } } public bool IsGroupRowSelected(int rowHandle, GridView view) { for (int i = 0; i < view.GetChildRowCount(rowHandle); i++) { int row = _view.GetChildRowHandle(rowHandle, i); if (view.IsGroupRow(row)) { if (!IsGroupRowSelected(row, view)) return false; } else if (!IsRowSelected(row, view)) return false; } return true; } public bool IsRowSelected(int rowHandle, GridView view) { if (view.IsGroupRow(rowHandle)) return IsGroupRowSelected(rowHandle, view); object row = view.GetRow(rowHandle); return GetSelectedIndex(row) != -1; } public bool IsRowSelected(object row, GridView view) { return GetSelectedIndex(row) != -1; } protected virtual void Attach(GridView view) { if (view == null) return; selection.Clear(); this._view = view; edit = view.GridControl.RepositoryItems.Add("CheckEdit") as RepositoryItemCheckEdit; column = view.Columns.Add(); column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False; column.Visible = true; column.VisibleIndex = 0; column.FieldName = this.MarkFieldName; column.Caption = "Mark"; column.OptionsColumn.ShowCaption = false; column.OptionsColumn.AllowEdit = false; column.OptionsColumn.AllowSize = false; column.UnboundType = DevExpress.Data.UnboundColumnType.Boolean; column.Width = GetCheckBoxWidth(); // 2012-04-05 ADDED BY KDJ column.Fixed = FixedStyle.Left; column.ColumnEdit = edit; view.Click += new EventHandler(View_Click); view.CustomDrawColumnHeader += new ColumnHeaderCustomDrawEventHandler(View_CustomDrawColumnHeader); view.CustomDrawGroupRow += new RowObjectCustomDrawEventHandler(View_CustomDrawGroupRow); view.CustomUnboundColumnData += new CustomColumnDataEventHandler(view_CustomUnboundColumnData); view.KeyDown += new KeyEventHandler(view_KeyDown); view.RowStyle += new RowStyleEventHandler(view_RowStyle); // 2012-04-05 ADDED BY KDJ view.KeyUp += new KeyEventHandler(view_KeyUp); view.FocusedRowChanged += new FocusedRowChangedEventHandler(view_FocusedRowChanged); } void view_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) { this._view.BeginUpdate(); // 클릭시 현재 Row 선택되게 하는 루틴 //bool isSelection = this.IsRowSelected(row, view); //this.SelectRow(row, !isSelection, false, view); if (this.IsMultiSelect == true) { int start = 0, end = 0; if (e.PrevFocusedRowHandle <= e.FocusedRowHandle) { start = e.PrevFocusedRowHandle; end = e.FocusedRowHandle; } else { start = e.FocusedRowHandle; end = e.PrevFocusedRowHandle; } for (int i = start; i <= end; i++) { this.SelectRow(i, true, false, this._view); } } this._view.EndUpdate(); } public virtual void DetailViewAttach(GridView view) { if (view == null) return; this._view = view; _view.BeginUpdate(); try { column = view.Columns[this.MarkFieldName]; if (column == null) { selection.Clear(); edit = view.GridControl.RepositoryItems.Add("CheckEdit") as RepositoryItemCheckEdit; column = view.Columns.Add(); column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False; column.Visible = true; column.VisibleIndex = 0; column.FieldName = this.MarkFieldName; column.Caption = "Mark"; column.OptionsColumn.ShowCaption = false; column.OptionsColumn.AllowEdit = false; column.OptionsColumn.AllowSize = false; column.UnboundType = DevExpress.Data.UnboundColumnType.Boolean; column.Width = GetCheckBoxWidth(); column.ColumnEdit = edit; } edit = view.Columns[this.MarkFieldName].ColumnEdit as RepositoryItemCheckEdit;//view.GridControl.RepositoryItems.Add("CheckEdit") as RepositoryItemCheckEdit; view.Click += new EventHandler(View_Click); view.CustomDrawColumnHeader += new ColumnHeaderCustomDrawEventHandler(View_CustomDrawColumnHeader); view.CustomDrawGroupRow += new RowObjectCustomDrawEventHandler(View_CustomDrawGroupRow); view.CustomUnboundColumnData += new CustomColumnDataEventHandler(view_CustomUnboundColumnData); view.KeyDown += new KeyEventHandler(view_KeyDown); view.RowStyle += new RowStyleEventHandler(view_RowStyle); // 2012-04-05 ADDED BY KDJ view.KeyUp += new KeyEventHandler(view_KeyUp); view.FocusedRowChanged += new FocusedRowChangedEventHandler(view_FocusedRowChanged); } finally { _view.EndUpdate(); } } protected virtual void Detach() { if (_view == null) return; if (column != null) column.Dispose(); if (edit != null) { _view.GridControl.RepositoryItems.Remove(edit); edit.Dispose(); } _view.Click -= new EventHandler(View_Click); _view.CustomDrawColumnHeader -= new ColumnHeaderCustomDrawEventHandler(View_CustomDrawColumnHeader); _view.CustomDrawGroupRow -= new RowObjectCustomDrawEventHandler(View_CustomDrawGroupRow); _view.CustomUnboundColumnData -= new CustomColumnDataEventHandler(view_CustomUnboundColumnData); _view.KeyDown -= new KeyEventHandler(view_KeyDown); _view.RowStyle -= new RowStyleEventHandler(view_RowStyle); // 2012-04-05 ADDED BY KDJ _view.KeyUp -= new KeyEventHandler(view_KeyUp); _view.FocusedRowChanged -= new FocusedRowChangedEventHandler(view_FocusedRowChanged); _view = null; } public virtual void DetailViewDetach() { if (_view == null) return; _view.Click -= new EventHandler(View_Click); _view.CustomDrawColumnHeader -= new ColumnHeaderCustomDrawEventHandler(View_CustomDrawColumnHeader); _view.CustomDrawGroupRow -= new RowObjectCustomDrawEventHandler(View_CustomDrawGroupRow); _view.CustomUnboundColumnData -= new CustomColumnDataEventHandler(view_CustomUnboundColumnData); _view.KeyDown -= new KeyEventHandler(view_KeyDown); _view.RowStyle -= new RowStyleEventHandler(view_RowStyle); // 2012-04-05 ADDED BY KDJ _view.KeyUp -= new KeyEventHandler(view_KeyUp); _view.FocusedRowChanged -= new FocusedRowChangedEventHandler(view_FocusedRowChanged); _view = null; } protected int GetCheckBoxWidth() { DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info = edit.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo; int width = 0; GraphicsInfo.Default.AddGraphics(null); try { width = info.CalcBestFit(GraphicsInfo.Default.Graphics).Width; } finally { GraphicsInfo.Default.ReleaseGraphics(); } return width + CheckboxIndent * 2; } protected void DrawCheckBox(Graphics g, Rectangle r, bool Checked) { DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info; DevExpress.XtraEditors.Drawing.CheckEditPainter painter; DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args; info = edit.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo; painter = edit.CreatePainter() as DevExpress.XtraEditors.Drawing.CheckEditPainter; info.EditValue = Checked; info.Bounds = r; info.CalcViewInfo(g); args = new DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r); painter.Draw(args); args.Cache.Dispose(); } void Invalidate(GridView view) { view.CloseEditor(); view.BeginUpdate(); view.EndUpdate(); } void view_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) { GridView view = sender as GridView; if (e.Column.Caption == "Mark") { if (e.IsGetData) e.Value = /*IsRowSelected((view.DataSource as IList)[e.ListSourceRowIndex],view);*/ IsRowSelected(view.GetRowHandle(e.ListSourceRowIndex), view); else SelectRow((view.DataSource as IList)[e.ListSourceRowIndex], (bool)e.Value, view); } } void view_KeyDown(object sender, KeyEventArgs e) { GridView view = sender as GridView; if (e.KeyCode == Keys.ShiftKey && this.isMultiSelect == false) { this.IsMultiSelect = true; } if (view.FocusedColumn.Caption != "Mark" || e.KeyCode != Keys.Space) return; InvertRowSelection(view.FocusedRowHandle, view); } void view_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.ShiftKey & this.isMultiSelect == true) { this.isMultiSelect = false; } } void View_Click(object sender, EventArgs e) { GridView view = sender as GridView; GridHitInfo info; Point pt = view.GridControl.PointToClient(Control.MousePosition); Point viewOffset = view.GetViewInfo().Bounds.Location; //pt.Offset(-viewOffset.X, -viewOffset.Y); info = view.CalcHitInfo(pt); if (info.Column != null && info.Column.Caption == "Mark") { if (info.InColumn) { if (SelectedCount == view.DataRowCount) ClearSelection(view); else SelectAll(view); } if (info.InRowCell) { InvertRowSelection(info.RowHandle, view); } } if (info.InRow && view.IsGroupRow(info.RowHandle) && info.HitTest != GridHitTest.RowGroupButton) { InvertRowSelection(info.RowHandle, view); } } void View_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e) { if (e.Column != null && e.Column.Caption == "Mark") { GridView view = sender as GridView; e.Info.InnerElements.Clear(); e.Painter.DrawObject(e.Info); DrawCheckBox(e.Graphics, e.Bounds, SelectedCount == view.DataRowCount); e.Handled = true; } } void View_CustomDrawGroupRow(object sender, RowObjectCustomDrawEventArgs e) { GridView view = sender as GridView; DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo info; info = e.Info as DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo; info.GroupText = " " + info.GroupText.TrimStart(); e.Info.Paint.FillRectangle(e.Graphics, e.Appearance.GetBackBrush(e.Cache), e.Bounds); e.Painter.DrawObject(e.Info); Rectangle r = info.ButtonBounds; r.Offset(r.Width + CheckboxIndent * 2 - 1, 0); DrawCheckBox(e.Graphics, r, IsGroupRowSelected(e.RowHandle, view)); e.Handled = true; } void view_RowStyle(object sender, RowStyleEventArgs e) { GridView view = sender as GridView; if (IsRowSelected(e.RowHandle, view)) { e.Appearance.BackColor = SystemColors.Highlight; e.Appearance.ForeColor = SystemColors.HighlightText; } } }
'.Net > XtraGrid' 카테고리의 다른 글
[XtraGrid] Online Document (0) | 2012.04.13 |
---|---|
[XtraGrid] Copy & Paste 구현 (0) | 2012.04.11 |
[XtraGrid] How to make my grid columns read-only (0) | 2012.04.08 |
[XtraGrid] Fixed Columns (0) | 2012.04.05 |
[XtraGrid] DevExpress XtraGrid (0) | 2012.03.28 |
트랙백
댓글
글
줄 맞춰서 코딩 열심히 하고 Copy & Paste하면은 서식이 자동으로 다시 만들어 진다. ㅡㅡ;
나에게는 참 불편한 기능중에 하나
해제 방법은
'도구 -> 옵션 -> 텍스트 편집기 -> C# -> 서식 -> 일반' 으로 들어가서
모든 서식을 체크 해제한다.
추가 : 이렇게 하니 복사 붙여넣기 할때마다 인던트를 조절해야 하는 불편함이 생긴다.
그럴때는 체크 해주고
선언문의 공백을 무시합니다. 를 체크해준다.
그리고 서식 -> 간격 -> 연산자의 간격을 설정 합니다. -> 이항 연산자 주위의 공백을 무시합니다. 선택
'.Net > C#' 카테고리의 다른 글
[C#] Visual C# 메소드를 비동기로 호출하는 방법 (0) | 2012.04.14 |
---|---|
[C#] Assembly Version Loading (0) | 2012.04.06 |
[C#] log4net (0) | 2012.04.03 |
[C#] vshosting.exe 가 뭘까요? (0) | 2012.03.26 |
[C#] Dynamic Method Call With Out Parameter (0) | 2012.03.22 |
트랙백
댓글
글
'.Net > XtraGrid' 카테고리의 다른 글
[XtraGrid] Online Document (0) | 2012.04.13 |
---|---|
[XtraGrid] Copy & Paste 구현 (0) | 2012.04.11 |
[XtraGrid] How to make my grid columns read-only (0) | 2012.04.08 |
[XtraGrid] Checkbox 구현하기 (1) | 2012.04.06 |
[XtraGrid] DevExpress XtraGrid (0) | 2012.03.28 |
트랙백
댓글
글
(테이블 셀렉션) 후 ALT + F1 : 테이블 스키마 읽어오기
단축키 생성하기 : 도구 -> 옵션 -> 환경 -> 키보드
(테이블 셀렉션) 후 Ctrl+3 을 하면은
바로 가기가 실행된다.
'DB / NoSQL > MSSQL' 카테고리의 다른 글
[MSSQL] 유저 테이블 스키마 정보 얻어오기 (0) | 2012.04.24 |
---|---|
[MSSQL] 언어 타입 변경하기 (0) | 2012.04.20 |
[MSSQL] CONVERT TYPE 0~200 (0) | 2011.09.28 |
[MSSQL] 문자열 자르기 (0) | 2011.09.15 |
[MSSQL] Oracle과 비슷한 RowNum (0) | 2011.09.06 |
트랙백
댓글
글
링크 : http://blog.suromind.com/90
레퍼런스 : http://logging.apache.org/log4net/release/sdk/index.html
참고 : http://www.venomi.pe.kr/3191513
프로젝트에서 로그를 사용해야 하는데 log4j와 같이 유용하게 사용할수 있을 것 같다.
아래는 내가 사용하는 환경설정이다.
'.Net > C#' 카테고리의 다른 글
[C#] Assembly Version Loading (0) | 2012.04.06 |
---|---|
[C#] VS 2008 서식 자동 해제 (0) | 2012.04.06 |
[C#] vshosting.exe 가 뭘까요? (0) | 2012.03.26 |
[C#] Dynamic Method Call With Out Parameter (0) | 2012.03.22 |
[즐겨찾기] C# TreeView MultiSelect (0) | 2012.03.15 |
트랙백
댓글
글
* 옵션
링크 : http://blog.naver.com/hiphoptrain?Redirect=Log&logNo=130087380966
* checkbox 구성 하는 방법
링크 : http://www.devexpress.com/Support/Center/KB/p/A371.aspx#E990
'.Net > XtraGrid' 카테고리의 다른 글
[XtraGrid] Online Document (0) | 2012.04.13 |
---|---|
[XtraGrid] Copy & Paste 구현 (0) | 2012.04.11 |
[XtraGrid] How to make my grid columns read-only (0) | 2012.04.08 |
[XtraGrid] Checkbox 구현하기 (1) | 2012.04.06 |
[XtraGrid] Fixed Columns (0) | 2012.04.05 |
트랙백
댓글
글
이게 궁금해서 찾아보니 잘 설명된 블로그가 있어서 링크 걸어둡니다.
링크 : http://blog.naver.com/saltynut?Redirect=Log&logNo=120017351107
'.Net > C#' 카테고리의 다른 글
[C#] VS 2008 서식 자동 해제 (0) | 2012.04.06 |
---|---|
[C#] log4net (0) | 2012.04.03 |
[C#] Dynamic Method Call With Out Parameter (0) | 2012.03.22 |
[즐겨찾기] C# TreeView MultiSelect (0) | 2012.03.15 |
[C#] internal 지정자 (0) | 2012.03.12 |
트랙백
댓글
글
'.Net > .Net' 카테고리의 다른 글
[.Net] CLR Inside Out: 메모리 문제 조사 (0) | 2012.04.10 |
---|---|
[.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic) (0) | 2012.04.10 |
[C#] .Net Control.Invoke (0) | 2012.03.18 |
[C#] .Net 탐색기, Drag And Drop 구현 (0) | 2012.03.15 |
[.Net] System.CodeDom namespace (0) | 2012.03.09 |
트랙백
댓글
글
호출해 준다.
// class public class MyObject { pub int Connect() { // 접속 ... } public void GetLastError(out int errorCode, out string errorMessage) { // 내부 코드들 ... } }
// ErrorUtil public class ErrorUtil { private static readonly string methodName = "GetLastError"; private static int errorCode = 0; private static string errorMessage = ""; public static int ErrorCode { get { return errorCode; } } public static string ErrorMessage { get { return errorMessage; } } public static bool GetLastError(object obj) { try { Type t = obj.GetType(); MethodInfo info = t.GetMethod( ErrorUtil.methodName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(int).MakeByRefType(), typeof(string).MakeByRefType() }, null ); if (info != null) { object[] parameters = new object[2]; info.Invoke(obj, parameters); errorCode = (int)parameters[0]; errorMessage = (string)parameters[1]; return true; } else { errorMessage = String.Format("{0} 메소드를 찾을수 없거나, 파라미터가 정확하지 않습니다.", ErrorUtil.methodName); return false; } } catch (Exception ex) { errorMessage = ex.Message; return false; } } }
// 사용예 MyObject oCommpany = new MyObject(); int retCode = oCompany.Connect(); if (retCode != 0) { ErrorUtil.GetLastError(oCompany); MessageBox.Show(ErrorUtil.ErrorMessage); }
'.Net > C#' 카테고리의 다른 글
[C#] log4net (0) | 2012.04.03 |
---|---|
[C#] vshosting.exe 가 뭘까요? (0) | 2012.03.26 |
[즐겨찾기] C# TreeView MultiSelect (0) | 2012.03.15 |
[C#] internal 지정자 (0) | 2012.03.12 |
[즐겨찾기] 무료서적 Inside C# 2nd (0) | 2012.03.10 |
트랙백
댓글
글
다른걸 떠나서 생산성 하나는 끝내준다.
각설하고 기본적으로 UI컨트롤은 메세지 루프로 이벤트를 받기때문에 메인 윈도우에서 생성해줘야 한다.
물론 별도 스레드를 만들고 메세지 루프도 만들어주면 가능하기는 한데 이건 된다 이거지 이렇게 사용해본적도
없고 본적도 없다.
백그라운드 작업을 할때 별도의 스레드에서 작업을 하고 메인 스레드에서 프로그레스 바를 이용해서 상태값을
변경해주는 방법을 종종 사용하는데 이게 네이티브 응용프로그램에서는 메세지로 컨트롤 했는데
.Net쪽에서는 Controls.Invoke를 사용해서 해결한다는걸 삽질끝에 알았다.
Invoke 설명 : http://msdn.microsoft.com/ko-kr/library/system.windows.forms.control.invoke.aspx
위 이미지 같이 각 파일의 복사 나 이동의 상태를 알려주고 아래 프로그래스 바는 전체 파일 단위의 상태를 알려준다.
form code
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Security.AccessControl; using System.Threading; namespace TestExplorer { public partial class FileProgressForm : Form { public enum ACTION_TYPE {COPY, MOVE} delegate void SetProgressValueDelegate(int value); delegate void SetLabelTextDelegate(string text); delegate void DoEndDelegate(); private string sourcePath = ""; private string targetPath = ""; private byte[] buffer = new byte[1024*100];// 100Kb private Thread thread = null; private ACTION_TYPE action = ACTION_TYPE.COPY; private bool isThreadEnd = false; public string SourcePath { get { return sourcePath; } set { sourcePath = value; } } public string TargetPath { get { return targetPath; } set { targetPath = value; } } public ACTION_TYPE Action { get { return (action); } set { action = value; } } public FileProgressForm() { InitializeComponent(); } private void FileProgressForm_Load(object sender, EventArgs e) { } private void DoEnd() { this.isThreadEnd = true; this.DialogResult = DialogResult.OK; } private void FileProgressForm_Shown(object sender, EventArgs e) { // 파일 읽기 작업을 시작한다. if (File.Exists(this.sourcePath) == false && Directory.Exists(this.targetPath) == false) { MessageBox.Show("원본 폴더나, 파일을 선택해 주세요."); this.DialogResult = DialogResult.Cancel; return; } if (Directory.Exists(this.targetPath) == false) { MessageBox.Show("대상 폴더를 선택해 주세요."); this.DialogResult = DialogResult.Cancel; return; } if (this.sourcePath.Equals(this.targetPath) == true) { MessageBox.Show("원본과 대상이 일치합니다."); this.DialogResult = DialogResult.Cancel; return; } thread = new Thread(new ThreadStart(WorkThread)); thread.Start(); } // 복사 작업을 한다. private void WorkThread() { FileInfo[] arrfileInfo = null; if (File.Exists(sourcePath) == true) { arrfileInfo = new FileInfo[] { new FileInfo(sourcePath) }; } else if (Directory.Exists(sourcePath) == true) { DirectoryInfo dirInfo = new DirectoryInfo(sourcePath); arrfileInfo = dirInfo.GetFiles(); } if (arrfileInfo != null) { int count = arrfileInfo.Length; long total_current = 0; long total_total = 0; // 총 파일 용량을 가져온다. foreach (FileInfo i in arrfileInfo) { if ((i.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden) { total_total += i.Length; } } // 복사할 파일을 순회한다. foreach (FileInfo i in arrfileInfo) { if ((i.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } FileStream rs = null, ws = null; try { rs = new FileStream(i.FullName, FileMode.Open); ws = new FileStream(targetPath + "\\" + i.Name, FileMode.Create); // 익명 메서드 this.Invoke((SetLabelTextDelegate)delegate(string text) { this.label_filename.Text = text; }, new object[] {i.Name}); int readSize = 0; long current_current = 0; long current_total = i.Length; while ((readSize = rs.Read(buffer, 0, buffer.Length)) != 0) { current_current += readSize; total_current += readSize; // 현재 프로그래스 바 int percent = (int)((double)current_current / (double)current_total * 100); Console.WriteLine("cur={0}, total={1}, percent={2}", current_current, current_total, percent); //익명 메서드 this.Invoke((SetProgressValueDelegate)delegate(int value) { this.progressCur.Value = value; this.lableCurPercent.Text = String.Format("{0}%", value); }, new object[] {percent}); // 토탈 프로그래스 바 percent = (int)((double)total_current / (double)total_total * 100); //익명 메서드 this.Invoke((SetProgressValueDelegate)delegate(int value) { this.progressTotal.Value = value; this.labelTotalPercent.Text = String.Format("{0}%", value); }, new object[] { percent }); ws.Write(buffer, 0, readSize); }//while ((readSize = rs.Read(buffer, 0, buffer.Length)) != 0) //익명 메서드 this.Invoke((SetProgressValueDelegate)delegate(int value) { this.progressCur.Value = value; this.lableCurPercent.Text = String.Format("{0}%", value); }, new object[] { 100 }); } catch (Exception ex) { } finally { try { rs.Close(); } catch (Exception ex) { } try { ws.Close(); } catch (Exception ex) { } } if (this.action == ACTION_TYPE.MOVE) { File.Delete(i.FullName); } }//foreach (FileInfo i in arrfileInfo) //익명 메서드 this.Invoke((SetProgressValueDelegate)delegate(int value) { this.progressTotal.Value = value; this.labelTotalPercent.Text = String.Format("{0}%", value); }, new object[] { 100 }); //TODO: 500 밀리세컨 슬립한다. Thread.Sleep(500); }//if (arrfileInfo != null) this.Invoke((DoEndDelegate)delegate() { this.DoEnd(); }); }//private void WorkThread(object arg) private void FileProgressForm_FormClosing(object sender, FormClosingEventArgs e) { if (thread != null && thread.IsAlive == true && isThreadEnd == false ) { MessageBox.Show("작업 중입니다."); e.Cancel = true; } } } }
designer code
namespace TestExplorer { partial class FileProgressForm { ////// Required designer variable. /// private System.ComponentModel.IContainer components = null; ////// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code ////// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.progressCur = new System.Windows.Forms.ProgressBar(); this.progressTotal = new System.Windows.Forms.ProgressBar(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.labelTotalPercent = new System.Windows.Forms.Label(); this.lableCurPercent = new System.Windows.Forms.Label(); this.label_filename = new System.Windows.Forms.Label(); this.SuspendLayout(); // // progressCur // this.progressCur.Location = new System.Drawing.Point(13, 49); this.progressCur.Name = "progressCur"; this.progressCur.Size = new System.Drawing.Size(366, 32); this.progressCur.Step = 1; this.progressCur.TabIndex = 0; // // progressTotal // this.progressTotal.Location = new System.Drawing.Point(12, 107); this.progressTotal.Name = "progressTotal"; this.progressTotal.Size = new System.Drawing.Size(366, 32); this.progressTotal.Step = 1; this.progressTotal.TabIndex = 1; // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(13, 32); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(65, 12); this.label1.TabIndex = 2; this.label1.Text = "현재 파일 :"; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(13, 91); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(65, 12); this.label2.TabIndex = 3; this.label2.Text = "전체 파일 :"; // // labelTotalPercent // this.labelTotalPercent.AutoSize = true; this.labelTotalPercent.Location = new System.Drawing.Point(87, 91); this.labelTotalPercent.Name = "labelTotalPercent"; this.labelTotalPercent.Size = new System.Drawing.Size(21, 12); this.labelTotalPercent.TabIndex = 4; this.labelTotalPercent.Text = "0%"; // // lableCurPercent // this.lableCurPercent.AutoSize = true; this.lableCurPercent.Location = new System.Drawing.Point(87, 32); this.lableCurPercent.Name = "lableCurPercent"; this.lableCurPercent.Size = new System.Drawing.Size(21, 12); this.lableCurPercent.TabIndex = 5; this.lableCurPercent.Text = "0%"; // // label_filename // this.label_filename.AutoSize = true; this.label_filename.Location = new System.Drawing.Point(13, 9); this.label_filename.Name = "label_filename"; this.label_filename.Size = new System.Drawing.Size(75, 12); this.label_filename.TabIndex = 7; this.label_filename.Text = "(현재파일명)"; // // FileProgressForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(391, 151); this.Controls.Add(this.label_filename); this.Controls.Add(this.lableCurPercent); this.Controls.Add(this.labelTotalPercent); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.progressTotal); this.Controls.Add(this.progressCur); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "FileProgressForm"; this.Text = "파일전송"; this.Load += new System.EventHandler(this.FileProgressForm_Load); this.Shown += new System.EventHandler(this.FileProgressForm_Shown); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FileProgressForm_FormClosing); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ProgressBar progressCur; private System.Windows.Forms.ProgressBar progressTotal; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label labelTotalPercent; private System.Windows.Forms.Label lableCurPercent; private System.Windows.Forms.Label label_filename; } }
'.Net > .Net' 카테고리의 다른 글
[.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic) (0) | 2012.04.10 |
---|---|
[C#] Implementing a Database Factory Pattern in C# ASP .NET (0) | 2012.03.25 |
[C#] .Net 탐색기, Drag And Drop 구현 (0) | 2012.03.15 |
[.Net] System.CodeDom namespace (0) | 2012.03.09 |
[즐겨찾기] .Net Install (0) | 2012.03.08 |
트랙백
댓글
글
'.Net > Spring.Net' 카테고리의 다른 글
[Spring.Net] Spring.Net 개발가이드 (0) | 2012.12.10 |
---|
트랙백
댓글
글
Drag And Drop도 구현
Ctrl+마우스 DnD : 복사, 마우스 DnD : 이동
탐색기 갱신의 약간의 버그와 소스코드가 드러운데
나중을 위해서 그냥 저장...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace TestExplorer
{
public partial class MainForm : Form
{
private TreeNode sourceNode = null;
public MainForm()
{
InitializeComponent();
}
private void LoadDrive()
{
DriveInfo[] drivers = DriveInfo.GetDrives();
foreach (DriveInfo i in drivers)
{
if ( (i.DriveType & DriveType.Fixed) == DriveType.Fixed )
{
TreeNode newNode1 = this.treeView1.Nodes.Add(i.Name);
TreeNode newNode2 = this.treeView2.Nodes.Add(i.Name);
DirectoryInfo di = new DirectoryInfo(i.Name);
try
{
if (di.GetFileSystemInfos().Count() > 0)
{
newNode1.Nodes.Add("temp");
newNode2.Nodes.Add("temp");
}
}
catch (Exception e)
{
}
}
}
}
private void RefreshNode(TreeNode sourceNode, TreeNode targetNode)
{
}
private void Form1_Load(object sender, EventArgs e)
{
LoadDrive();
}
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
// root는 제외
//MessageBox.Show(e.Node.Text);
e.Node.Nodes.Clear();
string fullPath = e.Node.FullPath;
DirectoryInfo di = new DirectoryInfo(fullPath);
FileSystemInfo[] arrFsi = di.GetFileSystemInfos();
e.Node.TreeView.BeginUpdate();
foreach (FileSystemInfo i in arrFsi)
{
if ( (i.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden )
{
TreeNode newNode = e.Node.Nodes.Add(i.Name);
DirectoryInfo newDI = new DirectoryInfo(i.FullName);
try
{
if (newDI.GetFileSystemInfos().Count() > 0)
{
newNode.Nodes.Add("temp");
}
}
catch (Exception ex)
{
}
}
}
e.Node.TreeView.EndUpdate();
}
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
System.Console.WriteLine("treeView1_MouseDown");
TreeViewHitTestInfo hitInfo = this.treeView1.HitTest(e.Location);
if (hitInfo != null && hitInfo.Node != null)
{
TreeNode node = hitInfo.Node;
System.Console.WriteLine(node.FullPath);
// 현재 노드를 선택해준다.
node.TreeView.SelectedNode = node;
}
}
private void treeView1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
{
System.Console.WriteLine("treeView1_QueryContinueDrag");
if (e.EscapePressed)
{
e.Action = DragAction.Cancel;
}
}
private void treeView2_DragEnter(object sender, DragEventArgs e)
{
System.Console.WriteLine("treeView2_DragEnter");
}
private void treeView2_DragOver(object sender, DragEventArgs e)
{
System.Console.WriteLine("treeView2_DragOver");
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
if ((e.KeyState & 8) == 8)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.Move;
}
}
}
private void treeView2_DragDrop(object sender, DragEventArgs e)
{
System.Console.WriteLine("treeView2_DragDrop");
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
string sourcePath = (string)e.Data.GetData(DataFormats.StringFormat);
Point pt = new Point(MousePosition.X, MousePosition.Y);
pt = this.treeView2.PointToClient(pt);
TreeViewHitTestInfo hitInfo = this.treeView2.HitTest(pt);
if (hitInfo != null && hitInfo.Node != null)
{
string targetPath = hitInfo.Node.FullPath;
// 폴더 복사
if (Directory.Exists(sourcePath) == true
&& Directory.Exists(targetPath) == true)
{
FileProgressForm form = new FileProgressForm();
form.SourcePath = sourcePath;
form.TargetPath = targetPath;
if (e.Effect == DragDropEffects.Move)
{
form.Action = FileProgressForm.ACTION_TYPE.MOVE;
}
else if (e.Effect == DragDropEffects.Copy)
{
form.Action = FileProgressForm.ACTION_TYPE.COPY;
}
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
TreeView tree = hitInfo.Node.TreeView;
hitInfo.Node.TreeView.TopNode.Collapse();
hitInfo.Node.TreeView.TopNode.Expand();
hitInfo.Node.Collapse();
hitInfo.Node.Expand();
sourceNode.TreeView.TopNode.Collapse();
sourceNode.TreeView.TopNode.Expand();
sourceNode.Collapse();
sourceNode.Expand();
}
else if (result == DialogResult.Cancel)
{
}
}
// 파일 복사
else if (File.Exists(sourcePath) == true
&& Directory.Exists(targetPath) == true)
{
FileProgressForm form = new FileProgressForm();
form.SourcePath = sourcePath;
form.TargetPath = targetPath;
if (e.Effect == DragDropEffects.Move)
{
form.Action = FileProgressForm.ACTION_TYPE.MOVE;
}
else if (e.Effect == DragDropEffects.Copy)
{
form.Action = FileProgressForm.ACTION_TYPE.COPY;
}
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
TreeView tree = hitInfo.Node.TreeView;
hitInfo.Node.TreeView.TopNode.Collapse();
hitInfo.Node.TreeView.TopNode.Expand();
hitInfo.Node.Collapse();
hitInfo.Node.Expand();
sourceNode.TreeView.TopNode.Collapse();
sourceNode.TreeView.TopNode.Expand();
sourceNode.Collapse();
sourceNode.Expand();
}
else if (result == DialogResult.Cancel)
{
}
}
else
{
MessageBox.Show("파일이 존재하지 않거나, 복사하려는 곳이 폴더가 아닙니다.");
}
}
}
}
private void Main_Shown(object sender, EventArgs e)
{
//DialogResult result = MessageBox.Show("정식 버전을 구입하세요", "확인", MessageBoxButtons.YesNo);
//if (result == DialogResult.No)
//{
// this.Close();
//}
//else
//{
// MessageBox.Show("정식 버전을 구입해 주셔서 감사합니다.");
//}
}
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
TreeNode node = e.Item as TreeNode;
if (node != null )
{
System.Console.WriteLine(node.FullPath);
string fullPath = node.FullPath;
sourceNode = node;
Console.WriteLine("treeView1_ItemDrag=" + fullPath);
// DoDragDrop 시작
DragDropEffects effects = DoDragDrop(fullPath, DragDropEffects.Copy | DragDropEffects.Move);
// 트리 부모 노드를 갱신해 준다.
if (effects == DragDropEffects.Move)
{
}
}
}
private void treeView2_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
}
}
}
designer code
namespace TestExplorer
{
partial class MainForm
{
///
/// 필수 디자이너 변수입니다.
///
private System.ComponentModel.IContainer components = null;
///
/// 사용 중인 모든 리소스를 정리합니다.
///
/// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form 디자이너에서 생성한 코드
///
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
///
private void InitializeComponent()
{
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.treeView1 = new System.Windows.Forms.TreeView();
this.treeView2 = new System.Windows.Forms.TreeView();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// splitContainer1
//
this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.splitContainer1.Location = new System.Drawing.Point(13, 13);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.treeView1);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.treeView2);
this.splitContainer1.Size = new System.Drawing.Size(659, 387);
this.splitContainer1.SplitterDistance = 327;
this.splitContainer1.TabIndex = 2;
//
// treeView1
//
this.treeView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.treeView1.HotTracking = true;
this.treeView1.Location = new System.Drawing.Point(3, 3);
this.treeView1.Name = "treeView1";
this.treeView1.Size = new System.Drawing.Size(321, 381);
this.treeView1.TabIndex = 4;
this.treeView1.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.treeView1_QueryContinueDrag);
this.treeView1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.treeView1_MouseDown);
this.treeView1.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeExpand);
this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView1_ItemDrag);
//
// treeView2
//
this.treeView2.AllowDrop = true;
this.treeView2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.treeView2.HotTracking = true;
this.treeView2.Location = new System.Drawing.Point(3, 3);
this.treeView2.Name = "treeView2";
this.treeView2.Size = new System.Drawing.Size(322, 381);
this.treeView2.TabIndex = 3;
this.treeView2.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeExpand);
this.treeView2.NodeMouseHover += new System.Windows.Forms.TreeNodeMouseHoverEventHandler(this.treeView2_NodeMouseHover);
this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView2_DragDrop);
this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView2_DragEnter);
this.treeView2.DragOver += new System.Windows.Forms.DragEventHandler(this.treeView2_DragOver);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(684, 412);
this.Controls.Add(this.splitContainer1);
this.Name = "MainForm";
this.Text = "TestExplorer";
this.Load += new System.EventHandler(this.Form1_Load);
this.Shown += new System.EventHandler(this.Main_Shown);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.TreeView treeView2;
private System.Windows.Forms.TreeView treeView1;
}
}
'.Net > .Net' 카테고리의 다른 글
[.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic) (0) | 2012.04.10 |
---|---|
[C#] Implementing a Database Factory Pattern in C# ASP .NET (0) | 2012.03.25 |
[C#] .Net Control.Invoke (0) | 2012.03.18 |
[.Net] System.CodeDom namespace (0) | 2012.03.09 |
[즐겨찾기] .Net Install (0) | 2012.03.08 |
트랙백
댓글
글
'.Net > C#' 카테고리의 다른 글
[C#] log4net (0) | 2012.04.03 |
---|---|
[C#] vshosting.exe 가 뭘까요? (0) | 2012.03.26 |
[C#] Dynamic Method Call With Out Parameter (0) | 2012.03.22 |
[C#] internal 지정자 (0) | 2012.03.12 |
[즐겨찾기] 무료서적 Inside C# 2nd (0) | 2012.03.10 |
트랙백
댓글
글
문서 : http://sourcegrid.codeplex.com/documentation
이번에 프로젝트를 위해서 무료 그리드를 찾던중 발견한 그리드 몰랐는데 역사가 오래되었다.
개발툴을 만드는 용도기 때문에 기본 기능으로 충분할 것 같다.
트랙백
댓글
글
'.Net > C#' 카테고리의 다른 글
[C#] log4net (0) | 2012.04.03 |
---|---|
[C#] vshosting.exe 가 뭘까요? (0) | 2012.03.26 |
[C#] Dynamic Method Call With Out Parameter (0) | 2012.03.22 |
[즐겨찾기] C# TreeView MultiSelect (0) | 2012.03.15 |
[즐겨찾기] 무료서적 Inside C# 2nd (0) | 2012.03.10 |
트랙백
댓글
글
'.Net > C#' 카테고리의 다른 글
[C#] log4net (0) | 2012.04.03 |
---|---|
[C#] vshosting.exe 가 뭘까요? (0) | 2012.03.26 |
[C#] Dynamic Method Call With Out Parameter (0) | 2012.03.22 |
[즐겨찾기] C# TreeView MultiSelect (0) | 2012.03.15 |
[C#] internal 지정자 (0) | 2012.03.12 |
트랙백
댓글
글
[Visual Studio 2005] Visual Studio 2005 에서 ildasm.exe 위치
설정
64bit : C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin
'IDE/Tool > Visual Studio' 카테고리의 다른 글
[Visual Studio] Add-In 만들기 (0) | 2012.05.16 |
---|---|
[Visual Studio 2005] 매크로 환경변수 (0) | 2012.04.11 |
[Visual Studio] 마법사 만들기 (0) | 2012.03.08 |
[Visual Studio 2008] Unicode 기반 프로그램에서 한글이 깨지는 현상 (0) | 2011.03.01 |
[링크] 매크로를 이용한 Visual Studio .h .cpp 전환 (0) | 2011.02.15 |
트랙백
댓글
글
링크 : http://msdn.microsoft.com/ko-kr/library/f1dfsbhc.aspx
링크 : http://zmeun.tistory.com/37
'.Net > .Net' 카테고리의 다른 글
[.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic) (0) | 2012.04.10 |
---|---|
[C#] Implementing a Database Factory Pattern in C# ASP .NET (0) | 2012.03.25 |
[C#] .Net Control.Invoke (0) | 2012.03.18 |
[C#] .Net 탐색기, Drag And Drop 구현 (0) | 2012.03.15 |
[즐겨찾기] .Net Install (0) | 2012.03.08 |
트랙백
댓글
글
Visual Studio 환경확장 : http://msdn.microsoft.com/ko-kr/library/esk3eey8(v=vs.80).aspx
자동화 어셈블리 및 DTE2 : http://msdn.microsoft.com/ko-kr/library/t6d9sf9k(v=vs.90).aspx
VSZ 만들기 : http://msdn.microsoft.com/ko-kr/library/b48hhx46(v=vs.80).aspx
VSDIR 만들기 : http://msdn.microsoft.com/ko-kr/library/2sc7ft4a(v=vs.80).aspx
한글 : http://cafe.naver.com/jcga.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=39&
'IDE/Tool > Visual Studio' 카테고리의 다른 글
[Visual Studio 2005] 매크로 환경변수 (0) | 2012.04.11 |
---|---|
[Visual Studio 2005] Visual Studio 2005 에서 ildasm.exe 위치 (0) | 2012.03.10 |
[Visual Studio 2008] Unicode 기반 프로그램에서 한글이 깨지는 현상 (0) | 2011.03.01 |
[링크] 매크로를 이용한 Visual Studio .h .cpp 전환 (0) | 2011.02.15 |
FAT32, NTFS 포맷 방식이 컴파일에 영향을 준다. (1) | 2008.10.12 |
트랙백
댓글
글
링크 : http://technet.microsoft.com/ko-kr/library/system.configuration.install.installer(v=vs.90).aspx
링크 : http://msdn.microsoft.com/ko-kr/library/6hbb4k3e(v=vs.90).aspx
링크 : http://msdn.microsoft.com/ko-kr/library/206sadcd(VS.80).aspx
'.Net > .Net' 카테고리의 다른 글
[.Net] Func 및 Action 제네릭 대리자에 가변성 사용(C# 및 Visual Basic) (0) | 2012.04.10 |
---|---|
[C#] Implementing a Database Factory Pattern in C# ASP .NET (0) | 2012.03.25 |
[C#] .Net Control.Invoke (0) | 2012.03.18 |
[C#] .Net 탐색기, Drag And Drop 구현 (0) | 2012.03.15 |
[.Net] System.CodeDom namespace (0) | 2012.03.09 |
트랙백
댓글
글
그리고 기본적으로 숨김 파일처리 되어서 숨김파일을 해제해야 한다.
위젯을 받아서 숨김파일을 볼수 있게 한다 (http://www.apple.com/downloads/dashboard/developer/hiddenfiles.html )
해당위치를 보면 iOS설치 앱이 보입니다.
'Mobile > iPhone / Xcode' 카테고리의 다른 글
[Xcode] XCode VS AppCode (0) | 2013.11.27 |
---|---|
[iOS] Open Source Chart for iOS (0) | 2013.01.12 |
[iOS] About View Controllers (0) | 2012.03.06 |
[iOS] About Events in iOS (0) | 2012.03.04 |
[iOS] json parser for Objective-c (0) | 2012.03.04 |
트랙백
댓글
글
View controllers are a vital link between an app’s data and its visual appearance. Whenever an iOS app displays a user interface, the displayed content is managed by a view controller or a group of view controllers coordinating with each other. Therefore, view controllers provide the skeletal framework on which you build your apps.
iOS provides many built-in view controller classes to support standard user interface pieces, such as navigation and tab bars. As part of developing an app, you also implement one or more custom controllers to display the content specific to your app.'Mobile > iPhone / Xcode' 카테고리의 다른 글
[iOS] Open Source Chart for iOS (0) | 2013.01.12 |
---|---|
[iOS] iOS Simulator 위치 (0) | 2012.03.06 |
[iOS] About Events in iOS (0) | 2012.03.04 |
[iOS] json parser for Objective-c (0) | 2012.03.04 |
[Xcode4] C, C++ 프로젝트 생성 (0) | 2011.10.22 |
트랙백
댓글
글
출처 : 출처 : iOS document
Events are objects sent to an application to inform it of user actions. In iOS, events can take many forms: multitouch events, motion events—for example, from device accelerometers—and events for controlling multimedia. (This last type of event is known as a remote-control event because it originates from a headset or other external accessory.)
'Mobile > iPhone / Xcode' 카테고리의 다른 글
[iOS] iOS Simulator 위치 (0) | 2012.03.06 |
---|---|
[iOS] About View Controllers (0) | 2012.03.06 |
[iOS] json parser for Objective-c (0) | 2012.03.04 |
[Xcode4] C, C++ 프로젝트 생성 (0) | 2011.10.22 |
[iOS] iOS5 GM 설치후 Personal Hotspot이 안나타날때 처리 방법 (0) | 2011.10.13 |
트랙백
댓글
글
'Mobile > iPhone / Xcode' 카테고리의 다른 글
[iOS] About View Controllers (0) | 2012.03.06 |
---|---|
[iOS] About Events in iOS (0) | 2012.03.04 |
[Xcode4] C, C++ 프로젝트 생성 (0) | 2011.10.22 |
[iOS] iOS5 GM 설치후 Personal Hotspot이 안나타날때 처리 방법 (0) | 2011.10.13 |
아이폰 펌웨어 업데이트 (0) | 2011.10.05 |
RECENT COMMENT