• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'2006/12'에 해당되는 글 7건

  • 2006.12.30 자동차 네비게이션. 4
  • 2006.12.26 C#에서 ListBox의 DataSource 속성 활용하기. 1
  • 2006.12.19 WTL 번역에 박차를... 4
  • 2006.12.19 SK에 지원을...첫날
  • 2006.12.17 첫.눈. 2
  • 2006.12.14 자매(?) 사이트 개설.
  • 2006.12.09 드디어 MSDN에 Vista가 등장! 2

자동차 네비게이션.

잡글 2006. 12. 30. 14:21
자동차 네비게이션 관련되어 판매되는 제품은 수도 없이 많다.
다양한 회사들이 다양한 제품들을 쏟아내고 있다.
기능들도 제각각, 멋진 기능에 저렴한 가격에...

그.러.나. 어느 것하나 제대로 끝까지 가는 회사들이 없는 것 같다.
최소한 우리집안에서 산 네비들은 다 그런것 같다.

먼저 고모부. 음성지원되는 네비 그것도 현재 머시기 하는 데서 구입하셨다는데,
지금은 더 이상 존재하지도 않는 회사.
아마도 개인 사업자 인것이 분명 할듯. 개인 사업자는 이름도 대기업과 겹쳐서
쓸수 있다고 하니까 다분 그럴 가능성이 높다.
이 회사 자체가 아예 사라졌으니, 지도 업데이트는 고사하고 A/S도 물건너간듯.

두번째, 아버지껏. 영성 TIS라는 회사에서 만든 뿐토 YCN-100.
최소한 영성 TIS는 살아 있는것 같은데, 이 네비게이션 관련 홈페이지는
문 닫았다. 오늘은 주말이라, DNS 서버가 맛탱 가서 그럴지는 모르겠지만,
일단 이 홈페이지 들어가지지 않는다.
게다가 영성 TIS라는 홈페이지는 브로셔 역할밖에 안하고, 그마나 글쓰는데가
있어 혹시나 하는 마음에 글을 적어놨다. 네비 관련 홈페이지가 안열린다고,.

왜 이 모양일까? 지속적인 업데이트가 필요한 제품일 수록 회사의 지속력이
우수하든가, 아니면 사라지지 않는 포털 업체랑 연계해서 지속적인 지도는
받을 수 있게 해주든가.
이러지도 저러지도 못하는 주제에 왜 제품을 만든걸까.....

만일. 여기의 글을 읽는 분이나, 그 분의 친척, 가족들은 부디, 이 따위 회사 제품을
사서 업데이트도 못받고 그러지 말고, 차라리 사질 말든가, 중소기업것은 사지
않는 것이 좋을 것이다. 혹여 대기업 것이라도, 단순 판매처라면 아예 사지 않는
것이 좋을지도 모르겠다.
아니면 GPS 좌표만 읽어오는 장치만 구입해 직접 지도를 구해 확인하는게
더 낫지 않을까?
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

C#에서 ListBox의 DataSource 속성 활용하기.

기술자료/CPP 2006. 12. 26. 20:34

C#에 있는 WinForm을 이용하여 ListBox 상에 데이터를 추가할 때 여러가지 방법이 있지만
나름대로 상당히 좋은 방법이 있어 여기에 기록합니다.

ListBox 상에 데이터를 넣는 방법은 보통 ListBox 객체 내에 있는 items를 이용하여
추가/삭제를 시도하게 됩니다. 하지만, 만일 ListBox 내에 표시되는 내용과 실제 사용하게
될 데이터가 틀린 경우에는 조금 다른 문제가 발생합니다.

여기서는 두가지 방법을 제시하려 합니다.
첫번째 방법은 가장 일반적인 방법으로 ListBox.items 라는 콜렉션 내에 추가하는 방법입니다.
가장 직관적이고 빠르게 처리할 수 있는 방법이죠.
두번째 방법은 DataSource 속성을 이용해 별도 데이터를 담은 콜렉션을 만들어 이 ListBox와 연결해주는 방법입니다.


1. ListBox.items 를 이용하는 방법


ListBox.items 콜렉션을 이용하는 방법은 보통 다양한 초보 서적에서 보기 쉬운 방법입니다. ListBox.items 콜렉션을 보시면 Object 객체의 콜렉션으로 나타내게 되는데, 여기에는 다양한 형이 들어갈 수 있습니다. 사실 Object를 상속 받은 모든 형태의 객체가 들어가므로 int 든 string 이든 거의 대부분의 값이 들어가게 됩니다.
그런데, 사실 찬찬히 이 items에 담긴 내용이 리스트 컨트롤에 출력될 때는 item[n].ToString() 을 해서 얻는 문자열로 나타낸다는 것입니다. 이를 이용하면 실제 출력될 문자열과 다양한 데이터를 담은 강력 리스트 박스를 얻을 수 있습니다.
다음 코드 내용이 바로 이 기능을 이용한 방법입니다.

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace ConsoleApplication1
{
  class Program
  {
      
       static void Main(string[] args)
       {
           Application.EnableVisualStyles();
           Application.SetCompatibleTextRenderingDefault(false);
           Application.Run(new MainForm());
          
       }
  }

  class DataType1 : Object // 데이터와 텍스트를 모두 들고 있는 객체입니다.
  {
       private string _name;
       private System.Drawing.Point _point;

       public string Name
       {
           get { return _name; }
           set { _name = Name; }
       }

       public Point Pos
       {
           get { return _point; }
           set { _point = Pos; }
       }

       public DataType1(string name, System.Drawing.Point pos)
       {
           _name = name;
           _point = pos;
       }

       public override string ToString() // 실제 리스트 박스에 출력되는 문자열이 만들어지는 부분입니다.
      {
           StringBuilder sb = new StringBuilder();
           sb.Append(_name);
           sb.Append(" [ ");
           sb.Append(_point.X.ToString());
           sb.Append(",");
           sb.Append(_point.Y.ToString());
           sb.Append(" ]");
           return sb.ToString();
       }

  }

  class MainForm : Form
  {
       ListBox listTest;

       public MainForm()
       {
           listTest = new ListBox();
           this.listTest.FormattingEnabled = true;
           this.listTest.Location = new System.Drawing.Point(5, 5);
           this.listTest.Name = "TestListBox";
           this.listTest.Size = new System.Drawing.Size(300, 400);
           this.listTest.TabIndex = 1;
           this.Load += new System.EventHandler(this.OnLoad);
       }

       private void OnLoad(object sender, EventArgs e)
       {
           this.Controls.Add(listTest);

           listTest.Items.Add(new DataType1("항목1",new Point(1,1)));
           listTest.Items.Add(new DataType1("항목2",new Point(5,6)));
           listTest.Items.Add(new DataType1("항목3",new Point(2,1)));
       }

  }
}


2. DataSource를 이용한 방법

자 이젠 DataSource를 이용한 방법입니다.
DataSource를 이용하려면 몇가지 준비사항이 있는데, 앞의 방법에서는 ListBox.items에
직접 데이터를 넣어 처리했다면, 이번에는 데이터를 별도로 저장할 자료구조 인스턴스
를 만드는 것입니다. 원래는 DB와 같은 데이터 원본을 갖추는 형태를 잘 활용할 수 있도록
제공된 기능이지만, 이런 부분에서 더 큰 장점이 될 수 있으리라 생각됩니다.

먼저 List<T> 라는 제네릭으로 객체를 만듦니다. 이 안에 리스트 박스에 넣을 데이터
원본을 기록하고, 이 원본을 리스트 박스와 바인드(연결) 하게 되는 것이죠.

그럼 그 방법을 소스로 표현하면 다음과 같습니다.

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;_

namespace ConsoleApplication1
{
  class Program
  {
      
       static void Main(string[] args)
       {
           Application.EnableVisualStyles();
           Application.SetCompatibleTextRenderingDefault(false);
           Application.Run(new MainForm());
          
       }
  }

  class DataType1 : Object
  {
       private string _name;
       private System.Drawing.Point _point;
       public string Name
       {
           // 이전 소스의 ToString()의 내용이 여기를 통해 처리하게 됩니다.
           get
           {
               StringBuilder sb = new StringBuilder();
               sb.Append(_name);
               sb.Append(" [ ");
               sb.Append(_point.X.ToString());
               sb.Append(",");
               sb.Append(_point.Y.ToString());
               sb.Append(" ]");
               return sb.ToString();
           }
           set { _name = Name; }
       }
       public Point Pos
       {
           get { return _point; }
           set { _point = Pos; }
       }
       public DataType1(string name, System.Drawing.Point pos)
       {
           _name = name;
           _point = pos;
       }
       // 이제 이 부분은 더이상 쓰이지 않습니다.
       //public override string ToString()
       //{
       //    StringBuilder sb = new StringBuilder();
       //    sb.Append(_name);
       //    sb.Append(" [ ");
       //    sb.Append(_point.X.ToString());
       //    sb.Append(",");
       //    sb.Append(_point.Y.ToString());
       //    sb.Append(" ]");
       //    return sb.ToString();
       //}
  }
  class MainForm : Form
  {
       ListBox listTest;
       List<DataType1> listDataSource;
       public MainForm()
       {
           listTest = new ListBox();
           listDataSource = new List<DataType1>(); // 데이터 소스 개체 생성
          
           this.listTest.FormattingEnabled = true;
           this.listTest.Location = new System.Drawing.Point(5, 5);
           this.listTest.Name = "TestListBox";
           this.listTest.Size = new System.Drawing.Size(300, 400);
           this.listTest.TabIndex = 1;
           this.Load += new System.EventHandler(this.OnLoad);
       }
       private void OnLoad(object sender, EventArgs e)
       {
           this.Controls.Add(listTest);
           listDataSource.Add(new DataType1("항목1",new Point(1,1)));
           listDataSource.Add(new DataType1("항목2",new Point(5,6)));
           listDataSource.Add(new DataType1("항목3",new Point(2,1)));
           this.listTest.DataSource = listDataSource; // ListBox와의 바인딩(연결)
           this.listTest.DisplayMember = "Name"; // DataType1의 Name 프로퍼티의 Get 내용이 출력
           this.listTest.ValueMember = "Pos"; // DataType1의 Pos 프로퍼티의 Get 내용이 내장 값
       }

  }
}

자 그럼 이게 무엇을 뜻하는 것일까요?
바로 Data와 View의 분리를 완전하게 선언 할 수 있게 됩니다.
지금은 예제를 위해 Console 프로그램에서 Windows.Form을 띄워 처리했지만,
Visual Studio의 Template로 제공하는 Windows application을 만들게 되면,
보통 Form용 클래스가 만들어집니다.
그러나 대부분이 이 Form 안에 Data든 View든 Control 이든 모든 로직을
이 클래스 하나에만 넣게 됩니다. 그렇게 되면 프로그램도 복잡해지고
소스관리도 어려워 지며 나중에 유지 보수 할 때도 애먹게 됩니다.

그러나 이 처럼 Data와 View를 분리해서 짜다보면 이런 문제점을 위의 문제를
수월하게 제어 하실 수 있게 됩니다.



3. ListBox 데이터 바인딩 팁.
이 글을 쓰게된 가장 중요한 사항인데, 사실 DataSource를 이용해 데이터 객체와 바인딩 하고 난뒤 이후의 처리가 굉장히 황당한 경우가 있습니다. 특히 원본 데이터 부분을 업데이트 했는데도 불구하고, ListBox내의 내용이 전혀 변화가 없는 경우입니다.
처음에 저는 다음과 같은 함수를 만들어 위의 문제를 해결해 보려고 했었습니다.

[CODE] private void UpdateList(ListBox listbox, List<DataType1> list)        {            try            {                BindingManagerBase bm;                bm = listbox.BindingContext[list];                bm.CancelCurrentEdit();                bm.ResumeBinding();            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }            listbox.Refresh();        } [/CODE]
보통 컨트롤 내에 데이터 바인딩 기법을 사용하게 되면 데이터 바인딩에 관련된 기능들을 이용할 수 있는데, 여기서 데이터 바인딩 매니저를 이용하여 업데이트 하게 끔 만든 것입니다.
그러나 최악의 문제가 원본 데이터가 완전히 비어 있는 경우 입니다.
이 경우 원본 데이터가 비어 있으므로 ListBox의 컨트롤 데이터가 전혀 변화가 없게 됩니다.
그래서 결국 위의 내용을 다음과 같이 변경 했습니다

[CODE] private void RebindingListBox(ListBox listbox, List<DataType1> list, string DisplayName, string ValueName)        {            listbox.DataSource = null;            listbox.DataSource = list;            listbox.DisplayMember = DisplayName;            listbox.ValueMember = ValueName;        } [/CODE]

코드를 보시면 알겠지만, 바로 바인딩 작업을 완전히 리셋한 뒤 다시 바인딩을 시도했습니다.
이 경우 바인딩 정보가 완전히 리셋되기 때문에, 원본 데이터 내용이 비어 있어도,
정상적으로 처리가 됩니다.

물론 위의 방법은 제가 발견한 팁일 분, 프로그래밍의 정답은 아닙니다.
개인적으로도 위의 방법은 비용이 조금 비쌀듯 해보입니다. 바인딩 정보를 완전히
날리고, 다시 재 바인딩 하기 때문에, 무언가 비용이 많이 들어갈 것 같습니다.
하지만, 현재 제가 발견한 방법 중에 확실하게 처리되는 것 같아 제시한 것입니다.

더 좋은 방법이나 다른 의견 있으시면 댓글을 통해 말씀해주시면 고맙겠습니다.
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

WTL 번역에 박차를...

잡글 2006. 12. 19. 00:25

CodeProject에서 Michael Dunn이라는 분이 작성한 WTL 문서를 번역하다가,
문서의 라이센스 관련된 사항을 보고, 메일을 보냈는데 다음과 같은 메시지를 보내주었다.

보낸 사람: Michael Dunn [ ]
보낸 날짜: 2006년 12월 14일 목요일 오후 4:38
받는 사람: ±eCuAø
제목: Re: About your article about WTL.

Hi Hyungjin Kim, a translation to Korean would be great :)  When you have finished the translation, send me another mail and I'll add a link to it in the English article.
Please use Michael Dunn's Email  to contact me in the future - this inreach.com address will be closing soon.

--
--Mike--  <http://home.inreach.com/mdunn/> Senior Software Architect, Zabersoft Inc.
"That probably would've sounded more commanding if I wasn't wearing my yummy sushi pajamas."
  -- Buffy

Dunn, 네 알겠습니다. 번역이 다 끝나면 알려드리지요!! ㅎㅎ

현재 번역하고 있는 장소 : Naoko Draft Documents Library
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

SK에 지원을...첫날

잡글 2006. 12. 19. 00:14

회사에서 업무를 수행하기에 적성이 너무 안맞아 이직을 하다가,
본부장님 도움으로 보직을 옮기게 되었다.
그 옮긴 보직의 내용이 현재 회사에서 진행 중인 SK 프로젝트 였다.

일단 오늘 아침 일찍 방문하여 도착하였다.
저번 해도 그렇고, 종로를 종종 방문해서, 어렵지 않게 찾을 수 있었다.
삼성전자 처럼 지나친 보안을 하진 않아 생각보다 쉽게 들어갈 수 있었다.

나름대로 부푼 마음을 안고 방문을 했지만,
애석하게도 타이밍이 그다지 좋은 편은 아니였다.
다들 사이트 오픈을 앞두고 있어 너무도 바쁘게 움직이고 있어
나로써는 딱히 업무속에 끼어들기가 무척어려웠다.
물론 내 성격 상 일을 찾긴 찾았는데, 마땅히 필요할 만한 일은 아니였다.

급한마음은 없지만, 다소 무의미하게 시간을 보낸게 조금 아쉬웠다.
더욱이 무엇을 준비해야 할지도 막막한것도...
일단, 사이트 오픈이 되어 사람들이 주변을 바라볼때, 나의 업무를 다시
Fix 받아 진행해야 겠다.

지금은 단지 기다림이 필요한 것 같다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

첫.눈.

잡글 2006. 12. 17. 03:33

내가 눈을 별로 안좋아해진게 언제 부터 일까?
다분, 다들 안좋은 기억이 쌓이기 시작한 것이 군대 갔을때 일것 같다.
물론 갔다와도, 연애를 할 때 로맨스를 쌓을 수 있는 기회가 있는 사람은
또 다른 좋은 기회를 가질 수 있겠지만, 아쉽게도 나에겐 눈과 연계된
로맨스 따윈 없다.

결론적으로는 아직도 눈을 그다지 반기지는 않는다.
더욱이 이번 법률로 제정한 집앞 눈쓸기 때문에, 더더욱 마음에 들지 않는다.
일단.... 그래도.... 첫눈.
녹거나 지저분 해지기 전에 언능 사진이나 여러방 남기고 없애야 겠다.
어제 너무 피곤해 저녁 7시 무렵에 잠이 들었는데, 그 덕에
아무런 때 안묻은 새벽에 일어나 첫눈을 맞이하게 되었다.
일단, 삼각대와 카메라를 챙겨 찍고 블로그에나 올려야 겠다.

-- 추가 글 --
일단, 일찍 일어난 기념, 첫눈 기념해서, 사진도 찍고 집앞의 눈도 쓸었다.
사람들 없는 조용한 늦은 밤 그리고 새벽은 나에게 아름다운 모습도 전해준다.
이미 거의 15년 동안 살아왔기 때문에, 새삼스레 다른 모습은 아닐지는 모르겠지만.
그래도 나름대로 새로운 느낌.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

자매(?) 사이트 개설.

잡글 2006. 12. 14. 15:20

일전에 만든 주소 naoko.pe.kr . 여기에 월 500원짜리 호스팅을 이용해 개설했다.
그런데, 개설한것 까지는 좋았지만, 문제는 어디다 활용할 것인가에 대해서는
전혀 아무런 생각이 없었다.
그냥 만들어봤다... 정도.그러다 이번에 Wiki의 필요가 절실해지면서, 그에 합당한 위치를 찾다가, 이곳을 선택했다.

이름은 Naoko Draft Documents Library.
이곳의 역할은 나의 쓰다만 각종 문서들을 기록하는 곳이다.
즉 완성본이 아닌 막 작성하기 시작한 문서들은 전부 이곳에 쓰고, 기록한 뒤
최종본을 여기다 올릴 생각이다.
어차피 WIKI 계열도 필요했고....

이젠 이 곳에 조금씩 조금씩 자료나 늘려봐야 겠다.


자매(?)사이트 URL : http://www.naoko.pe.kr
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

드디어 MSDN에 Vista가 등장!

잡글 2006. 12. 9. 10:01

예전에는 몰랐는데, MSDN Subscriber 라고, 유료 가입자들에게
제공되는 사이트가 있다. 물론 MS에 돈을 가져다 받쳐야 겠지만...
이 사이트에서는 일단 개발에 이용하는 목적으로 쓰일 각종 MS 제품들과
운영체제들을 무료로 다운 받을 수 있다. 사실 MS 제품 인증 받아야 하기 때문에,
결국 CD-KEY가 가장 중요한 문제가 되겠지만...

여튼 이 사이트에 드디어 운영체제인 Windows Vista 한글판이 등장했다.
얼마 전까지만 해도 계속 영문판으로 유지되어 왔었는데,
한국 MS의 번역작업이 드디어 마무리가 지어진듯.
아쉽게도 현재로는 라이센스 기능을 대거 변경해서, CD-KEY 유출이라는
부분이 무척 어렵게 되었다. 내가 해줄 수 있는 거라고는,
이 운영체제 다운 받아서 운영체제만 복사해주는 정도...

아아.. 회사 CD-KEY로 한번 설치해 봐야 겠다... 놋북에.


728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2006/12   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

me2dayzm 것 불만 좀 Google Apps Engine 블로그 협업 SharePoint me2sms windows 개발환경 2010 친구 e-book Azure Tutorial 오류 moss 비스킷 인터파크 지름신 me2photo Buscuit 매뉴얼 twi2me WSS 수 java MOSS 2007 Visual Studio

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바