< C# 사용 팁 모음 >
- Form
1. MDI 폼의 경우 자식 폼에 MDI 부모 품을 설정 하는 방법
// 자식 폼의 생성자에서 부모 폼의 인스턴스를 넘겨 주어 설정하도록 한다.
public ChildForm( MainForm frm )
{
InitializeComponent();
this.MdiParent = frm;
……….
}
2. 다이얼로그 폼 사용
LogInForm frm = new LogInForm();
frm.StartPosition = FormStartPosition.CenterScreen; // 다이얼로그 폼을 중심으로 이동
frm.ShowDialog();
if( DialogResult.OK == frm.DialogResult )
{
………………………………………
}
- 컨트롤
1. 리스트, 리스트뷰 컨트롤
- 컬럼 지정
: 리스트 및 리스트 뷰 컨트롤의 컬럼을 프로그래밍으로 지정 할 수 있지만 디자인 모드에서 더욱 쉽게
추가 할 수 있다. 예는 리스트 뷰로 하지만 리스트 컨트롤과 방법은 같다.
리스트 뷰 컨트롤을 지정한다.
속성 창에서 ‘Colummns’ 속성을 클릭 한다.
‘ColumnHeader 컬렉션 편집기가 나타난다.
여기서 컬럼을 추가 하기 위해 ‘추가’버튼을 누르면 오른쪽에 속성을 주는 부분이 나온다. 컬럼명과 넓이 등을 지정하면 된다.
* 프로그래밍적 방법
ListView.Columns.Add( "이름", 40, HorizontalAlignment.Center );
- 데이터 모두 삭제
ListView.Items.Clear();
- 데이터 추가
ListViewItem lvi = new ListViewItem();
lvi.SubItems.Add( “
lvi.SubItems.Add( “프로그래머팀” );
lvi.SubItems.Add( “서버파트” );
ListView.Items.Add( lvi );
ListView.Refresh();
- 데이터 추가 2
: 위의 방식은 컬럼의 첫번째가 이미지 리스트인 경우는 좋지만 리스트 뷰의 첫 컬럼에 어떤 문자를
나타내고 싶은 경우는 되지 않는다. 이런 경우 ListVieeItem의 생성자의 인자에 첫 컬럼에 나타내고 싶은
문자를 지정해 줘야 한다.
ListViewItem lvi = new ListViewItem( iCount.ToString() );
lvi.SubItems.Add( “
lvi.SubItems.Add( “프로그래머팀” );
lvi.SubItems.Add( “서버파트” );
ListView.Items.Add( lvi );
ListView.Refresh();
- 삽입된 모든 데이터 순회
int iItemNum = ListView.Items.Count;
for( int i = 0; i < iItemNum; ++i )
{
iYear = Convert.ToInt32(ListView.Items[i].SubItems[ 0 ].Text );
………..
|
- 기존 데이터 수정
……….
ListView.Items[i].SubItems[ 0 ].Text = iYear.ToString();
……..
- 특정 데이터 삭제 ( 순회 방법을 foreach를 사용함 )
………
foreach( ListViewItem lvi in ListView.Items )
{
if( lvi.SubItems[ 0 ].Text == “2005” )
ListView.Items.Remove( lvi );
}
…………
- 리스트 뷰의 특정 행을 선택한 경우 알고 싶을 때
ListView.SelectedListViewItemCollection Items = ListView.SelectedItems;
// 리스트 뷰의 컨트롤 속성이 멀티 선택 가능 상태에서 복수 개 선택을 하였다면 선택된 것이 다 나온다.
foreach( ListViewItem lvi in Items )
{
…….
}
2. 콤보 박스
- 콤보 박스의 데이터 모두 삭제
: combobox.Items.Clear();
- 데이터 추가
: combobox.Items.Add( “LIFEOnline” );
- 목록 중 지정된 데이터 목록을 찾아서 선택 되도록 하기
int index = combobox.Items.IndexOf(“LIFEOnline” );
if( index < 0 )
return;
combobox.SelectedIndex = index;
3. 그리드 컨트롤
- 그리드 컨트롤을 실행 시 데이터 추가
DataGrid grid = new DataGrid();
DataTable dt = new DataTable();
DataRow dr;
// 컬럼 헤드를 추가
dt.Columns.Add( new DataColumn("아이템", typeof(string)) );
dt.Columns.Add( new DataColumn("Code", typeof(Int32)) );
// 레코드 추가
dr = dt.NewRow();
dr[ 0 ] = “칼”; // 아이템 컬럼에 아이템 이름 추가
dr[ 0 ] = 110; // 코드 컬럼에 코드 번호 추가
dt.Rows.Add(dr); // 레코드를 추가 한다.
DataView dv = new DataView(dt); // 데이터 뷰를 만든다.
grid.DataSource= dv; // 그리드 컨트롤에 추가
- 그리드 컨트롤의 컬럼 스타일 지정
그리드 컨트롤에 데이터를 넣르면 컬럼이 지멋대로 되는 경우가 있다.. 이럴 때 원하는 스타일로
컬럼을 지정하면 된다..다만 꼭 데이터를 다 넣은 후에 해야 된다. 그전에 하면 데이터를 넣으면서
원하지 않는 상태로 변경되어 버린다.
…………………………………………………………….
DataGridTableStyle gtStyle1 = new DataGridTableStyle();
gtStyle1.GridColumnStyles.Add(new DataGridTextBoxColumn());
gtStyle1.GridColumnStyles[0].MappingName = “아이템”; // 이 이름이 컬럼 스타일을 바꾸기를 원하는 컬럼의
// 텍스트와 꼭 같아야 된다.
gtStyle1.GridColumnStyles[0].HeaderText = “아이템”; // 컬럼의 텍스트를 지정한다.
gtStyle1.GridColumnStyles[0].Alignment = HorizontalAlignment.Center; // 중간 정렬
gtStyle1.GridColumnStyles[0].Width = 70; // 폭 지정
gtStyle1.GridColumnStyles[0].NullText = string.Empty;
gtStyle1.GridColumnStyles.Add(new DataGridTextBoxColumn());
gtStyle1.GridColumnStyles[0].MappingName = “Code”; // 이 이름이 컬럼 스타일을 바꾸기를 원하는 컬럼의
// 텍스트와 꼭 같아야 된다.
gtStyle1.GridColumnStyles[0].HeaderText = “Code”; // 컬럼의 텍스트를 지정한다.
gtStyle1.GridColumnStyles[0].Alignment = HorizontalAlignment.Center; // 중간 정렬
gtStyle1.GridColumnStyles[0].Width = 70; // 폭 지정
gtStyle1.GridColumnStyles[0].NullText = string.Empty;
grid.TableStyles.Add(gtStyle1); // 그리드 컨트롤에 세팅 한다.
……………………………………………………………..
- ADO.NET
1. 오라클 DB 연결
string strCommonConnection = “Data Source=ORA10;User ID=admin;assword=1111”;
OracleConnection OraCommonDBConnt = new OracleConnection( strCommonConnection );
OraCommonDBConnt.Open();
2. 오라클 DB 끊기
if( ConnectionState.Open == OraCommonDBConnt.State )
OraCommonDBConnt.Close();
3. DataSet을 사용한 쿼리 작업
OracleDataAdapter OraDataAdapter = new OracleDataAdapter();
OracleCommand cmd = new OracleCommand();
cmd.Connection = OraCommonDBConnt;
cmd.CommandText = “SELECT * FROM Member”;
OraDataAdapter.SelectCommand = cmd;
OraDataAdapter.Fill( ResultDataSet , strTableName );
4. DataReader를 사용한 쿼리 작업
OracleDataAdapter OraDataAdapter = new OracleDataAdapter();
OracleCommand cmd = new OracleCommand();
cmd.Connection = OraCommonDBConnt;
cmd.CommandText = “SELECT * FROM Member”;
DataReader outDataReader = cmd.ExecuteReader();
if( false == outDataReader.HasRows )
return false;
………….
// 원하는 필드의 인덱스 번호를 알아낸다.
int IndexDex = outDataReader.GetOrdinal("Dex");
…………..
while( dataReader.Read() )
{
…………………..
CharInfo.DEX = outDataReader.GetInt32( IndexDex );
……………….
}
5. 테이블의 데이터 모두 삭제
string strContext = "DELETE FROM " + TableName;
OracleCommand cmd = new OracleCommand();
cmd.Connection = OraCommonDBConnt;
cmd.CommandText = strContext;
cmd.ExecuteNonQuery();
6. DataSet의 내용을 DataGrid 컨트롤에 넣기
GridQueryResult.SetDataBinding( ResultDataSet, strTableName );
7. 간단하게 DataSet을 이용한 테이블의 데이터 갱신
// 이전에 쿼리 작업을 한 DataAdapter를 사용해야 된다. 그렇지 않을 경우 DataAdapter에 업데이트 및 삭제 로직을
// 등록 해줘야 된다.
// 이 작업은 쿼리를 하여 DataGrid 컨트롤에 넣은 경우 DataGrid의 데이터를 수정 한 후 이 내용을 DB에 업데이트
// 하고 싶을 때 사용한다.
OracleCommandBuilder cb = new OracleCommandBuilder( OraDataAdapter );
cb.RefreshSchema();
OraDataAdapter.Update( dataset, TableName );
8. DataSet의 내용을 XML 파일로 저장
DataSet ds = new DataSet();
……….
ds.WriteXml( filename );
// 이후 위의 7번 방식을 이용해서 데이터를 추가 한다.
……
9. 테이블의 모든 데이터를 지우고 XML의 데이터를 추가 하기
// 테이블의 레코드를 모두 지운다.
……….
// ds 라는 DataSet에서 XML 파일을 읽어 들인다.
DataSet ds = new DataSet();
ds.ReadXml( textBoxFilePath.Text );
- 파일
1. 클래스 단위로 파일에 쓰기
이 직렬화 방식은 꼭 .NET 플랫폼에서 서로 파일을 읽고 쓸 때만 사용 가능하다.
만약 .NET으로 만든 프로그램에서 아래와 같이 파일을 만들고 이것을 네이티브에서
읽으면 앞에 다른 값이 들어가 있다( 정확하게는 직렬화 되는 클래스의 메타 정보가
들어가 있다 ).
FileStream GloveFile = new FileStream( "0.ipt", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize( GloveFile, ItemFileclass );
2. 현재 실행 하고 있는 프로그램의 실행 경로 얻기
Environment.CurrentDirectory
를 이용하면 실행 경로를 얻을 수 있다.
- 네트워크
1. 웹에 있는 파일을 받기
정확하게 말하면 http 프로토콜을 이용하여 웹에 있는 파일을 다운로드 하는 방식을 말한다.
WebRequest myWebRequest = WebRequest.Create("http://jacking75.cafe24.com/Index.hml");
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream ReceiveStream = myWebResponse.GetResponseStream();
ReceiveStream 객체를 파일 스트림을 이용하여 파일로 저장 하던가 다른 스트림으로 사용하면 된다.
- ETC
1. C#에서의 XML 주석 코드 제작을 위한 주석 작성 요령
: public bool IsEnableExecute( int iReqList )
{
…………
}
가 있다면
/// <summary>
/// 현재 수행하는 기능을 수행 가능한가
/// <summary>
/// <param name="iReqList">수행할 기능의 인덱스</param>
/// <returns name="true">수행가능</returns>
/// <returns name="false">수행불능</returns>
public bool IsEnableExecute( int iReqList )
{
…………
}
이렇게 작성한다.
2. 다른 클래스에 있는 const로 정의한 상수를 이용 방법
: 상수는 다음과 같이 정의 되어 있다.
public class PacketDefine
{
Public const int Packet_First = 0;
………..
}
이것을 Command 클래스에서 사용 할려면
…………
Int packetfirst = PacketDefine.Packet_First;
………….
사용한다.
3. 데이터 변환.
: 데이터 변환을 위해서는 Convert의 멤버를 사용한다.
Convert.Toxxx( xxx )를 사용하면 된다.
예) 스트링을 int 변환
Convert.ToInt32( string );
3. 바이트 배열을 지정된 위치와 크기로 복사할 경우
: Buffer.BlockCopy( ……. );
4. 클래스의 크기를 알고 싶을 때
: Marshal.SizeOf(LoginPacket)
LoginPacket는 인스턴스 화된 객체이어야만 한다. LoginPacket의 클래스인 LOGIN_PACKET를 사용하면 안된다.
5. 외부 프로그램 실행
: 여기서 인터넷 익스플로어를 실행해서 본인의 홈페이지에 가는 것을 예를 들겠다.
System.Diagnostics.Process IEProcess = new System.Diagnostics.Process();
IEProcess.StartInfo.FileName = "iexplore.exe";
IEProcess.StartInfo.Arguments = "http://jacking75.cafe24.com ";
IEProcess.Start();
6. 메시지 박스
- 일반 메시지 박스 사용
MessageBox.Show( "클라이언트에서 사용할 스킬 정보를 파일로 저장 하겠습니까 ?" );
- YES / NO 버튼 사용
if( DialogResult.Yes == MessageBox.Show( "클라이언트에서 사용할 스킬 정보를 파일로 저장 하겠습니까 ?",
"이진 파일 저장", MessageBoxButtons.YesNo ) )
7. 한글 파일 출력 문제
- 정확한 이유는 모르지만 한글을 파일에 입력할 때 인코딩을 Default 방식으로 지정하면
한글 XP에서는 한글을 아스키 코드 값으로 제대로 인식하지만 윈도우 2003에서는 한글을
유니코드 방식으로 인식하여 한글 1글자를 아스키 코드 1글자로 인식하는 경우가 있다.
string strValue = “개”;
encodedBytes = System.Text.Encoding.Default.GetBytes(strValue);
한글 XP에서 읽는다면 encodedBytes의 길이가 2개로 나오지만 윈도우 2003에서는
길이가 1로 된다.
이 문제를 해결할려면 인코딩 방식을 명시적으로 지정해야 된다.
string strValue = “개”;
encodedBytes = System.Text.Encoding.GetEncoding(949).GetBytes(strValue);
8. 폼의 마우스 커서 변경
- 화살표 마우스 커서 this.Cursor = Cursors.Arrow;
- 모래시계 커서 this.Cursor = Cursors. WaitCursor;
- 손 커서 this.Cursor = Cursors. Hand;
- 기본 커서 this.Cursor = Cursors. Default;
등등…….
9. 네이티브의 time(&time_t)에서 얻은 초단위의 시간을 C#에서 사용
- time함수를 이용하여 얻은 시간은 시작이 1970년부터이고 C#의 경우는
0년 1월1일 부터이다..그래서 서로 호환이 되지 않느다. 이것을 해결할려면
다음과 같이 하면 된다.
int iTime = C타임함수값;
DateTime dt = new DateTime(1970, 1, 1, 9, 0, 0); // 한국은 GMT+9시간
dt = dt.AddSeconds(iTime);
* 데브피아의
출처 : http://blog.naver.com/mindofpro/60043443410
[출처] C# 사용 팁 모음|작성자 엘
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
[C# 반복문] foreach문 (0) | 2012.09.11 |
---|---|
[본문스크랩] 비주얼 C++ 6.0과 .Net의 차이에 대해서 (1) | 2012.09.11 |
[C# .NET] 메세지 박스(MessageBox) (0) | 2012.09.10 |
[스크랩] WebBrowser 컨트롤 사용 (0) | 2012.09.09 |
C# Winform 에서 새 창 띄우기 (1) | 2012.09.06 |