Who are you?


이동범(Dongbum Lee)


Microsoft Regional Director


Microsoft MVP - VB.net


MHVB.net 시삽

Wanna talk with me?

Here I am

Subscription

MSN 메신저를 통해 글이 갱신되면 알려드립니다.

Windows Live Alerts

Search

Navigation

Categories

.net (14) Ajax (1) asp.net (2) AxWebBrowser (1) blog (3) browser (1) das blog (1) dasBlog (2) DataGridView (1) Google (1) ie (1) iis (1) javascript (1) jQuery (1) Microsoft (14) Office (2) OOXML (1) Silverlight (1) Team System (2) UX (1) VB (3) vb.net (4) Vista (1) visual studio (5) visual studio 2010 (1) windows7 (1) Winform (3) WinFX (1) WPF (2) 독점 (1) 성산포 (1) 음악 (1) 일상 (8) 조용필 (1)

On this page

DataGridView에서 Enter 키 입력시 다음 셀로 이동하기
Rosario CTP now Available!
Vista 에서 Network Priority 변경하기
OCS 2007/ OC 2007 RTM!
Visual Studio 2008 Beta2 is now available for download!!
MSN Alert Service를 Blog에 추가하기.
비스타에서 웹 어플리케이션 F5 디버깅 오류 패치 드디어 나오다.
Visual Studio 2005 Service Pack 1 Update for Windows Vista is ready for download!
SPUtility.HideTaiwan()

Archive

Blogroll

Notice

알림
본 블로그는 저의 개인적인 의견을 담고 있습니다.
제가 몸담고 있는 조직의 공식적인 의견과는 다를 수 있습니다.

RSS 2.0 | Atom 1.0 | CDF Send mail to the author(s) E-mail

BlogStats

Total Posts: 41
This Year: 0
This Month: 0
This Week: 0
Comments: 9

Sign In

# Thursday, August 23, 2007
Thursday, August 23, 2007 7:32:17 AM (Korea Standard Time, UTC+09:00) ( .net | DataGridView | Winform )

(Moving focus to next cell when 'Enter' key is pressed in DataGridView)

비따 회원 중 한분이 DataGridView에서 데이터를 편집시 Enter Key를 입력하면 왜 다음 셀로 이동하지 않고 다음 행으로 옮겨 가는지, 여간 불편하지 않다라는 질문을 해 왔다.

왜 DataGridView에서는 Enter키를 입력하면 다음 행의 셀로 이동하는 것일까?
해답을 찾기 위해 일단 Reflector를 통해 DataGridView에서 EnterKey가 입력될 때 수행하는 동작이 들어있는 DataGridView의 ProcessEnterKey 를 열어 보았다.

<SecurityPermission(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.UnmanagedCode)> _
Protected Function ProcessEnterKey(ByVal keyData As Keys) As Boolean
    Dim moved As Boolean = False
    Dim flag2 As Boolean = True
    Dim flag3 As Boolean = True
    If ((keyData And Keys.Control) = Keys.None) Then
        flag3 = False
        keyData = (keyData And Not Keys.Shift)
        flag2 = Me.ProcessDownKeyInternal(keyData, moved)
    End If
    If Not moved Then
        Dim dataGridViewCurrentCell As DataGridViewCell = Nothing
        If (Me.EditMode = DataGridViewEditMode.EditOnEnter) Then
            If (Me.ptCurrentCell.X <> -1) Then
                dataGridViewCurrentCell = Me.CurrentCellInternal
                Dim args As DataGridViewDataErrorEventArgs = _ 
                  Me.CommitEdit((dataGridViewCurrentCell), _
                  (DataGridViewDataErrorContexts.Commit Or _
                  DataGridViewDataErrorContexts.Parsing), _
                  DataGridViewValidateCellInternal.WhenChanged, _
                  False, False, False, False, False) If ((Not args Is Nothing) AndAlso args.ThrowException) Then Throw args.Exception End If End If Else Me.EndEdit((DataGridViewDataErrorContexts.Commit Or
            DataGridViewDataErrorContexts.Parsing), _
            DataGridViewValidateCellInternal.WhenChanged, False, False, _       
            False, False, False, True, True, True) End If If (Not flag3 OrElse Not Me.IsCurrentRowDirty) Then Return flag2 End If dataGridViewCurrentCell = Nothing Dim x As Integer = Me.ptCurrentCell.X Dim y As Integer = Me.ptCurrentCell.Y If Me.IsInnerCellOutOfBounds(x, y) Then Return flag2 End If If Me.OnRowValidating((dataGridViewCurrentCell), x, y) Then Return flag2 End If If Me.IsInnerCellOutOfBounds(x, y) Then Return flag2 End If Me.OnRowValidated((dataGridViewCurrentCell), x, y) End If Return flag2 End Function

다른 코딩들은 잘 분석해 보시고~ 여기서 붉은 색으로 표시되어 있는 부분을 살펴보면 짐작할 수 있듯 알아서~ 다음 행으로 CurrentCell을 이동시키는 코드가 들어있다.

 

이를 가로채기 위해서 일단 ProcessCmdKey 메서드를 Override 하기로 한다. ProcessCmdKey가 뭐냐구?
ProcessCmdKey 메서드란 컨트롤에서 명령키를 처리하기 위해 메세지를 전처리하는 동안 발생하는 메서드이다.(말이 어렵나? 나도 설명하기 어려워서 MSDN의 설명을 그대로 차용했다) 예기인 즉슨 컨트롤에 키가 입력되면 먼저 가로챌 수 있는 곳이라 생각하면 되겠다.

또 하나 처리해 줘야 할 메서드는 ProcessDataGridViewKey 이다. 해당 메서드는 DataGridView컨트롤에서 이동을 위한 키 입력시 입력된 키를 가로챌 수 있는 부분이다. 이 역시 앞서 설명한 ProceddCmdKey와 동일한 메서드이나, DataGridView에 특화된 메서드라 생각하자.

이 두개의 메서드에서 EnterKey가 입력으로 들어오면 기존에 정의된 ProcessDownKeyInternal 을 호출되기 때문에, EnterKey를 Right키로 가로채 바꿔치기를 하면 된다.

Public Class MyDataGridView
    Inherits System.Windows.Forms.DataGridView 

    Private isAutoCellMoved As Boolean = False
    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, _                                                 
                                                ByVal keyData As System.Windows.Forms.Keys) As Boolean
        If (Me.CurrentCell.ColumnIndex <> Me.ColumnCount - 1) AndAlso (keyData = Keys.Enter) Then
            Return Me.ProcessRightKey(keyData)
        End If
        Try
            Return MyBase.ProcessCmdKey(msg, keyData)
        Finally
            If keyData = Keys.Enter Then
                If Me.Rows.Count <> Me.CurrentCell.RowIndex + 1 Then
                    Me.CurrentCell = Me(0, Me.CurrentCell.RowIndex + 1)
                    isAutoCellMoved = True
                End If
            End If
        End Try
    End Function 

    Protected Overrides Function ProcessDataGridViewKey(ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
        If isAutoCellMoved Then
            isAutoCellMoved = Not isAutoCellMoved
            Return True
        End If 

        If (Me.CurrentCell.ColumnIndex <> Me.ColumnCount - 1) AndAlso (e.KeyData = Keys.Enter) Then
            Return Me.ProcessRightKey(e.KeyData)
        End If
        Return MyBase.ProcessDataGridViewKey(e)
    End Function 

위의 코드를 잘 보면, EnterKey가 입력될 시, ProcessRightKey를 호출하여 마치 Right 키를 누른 것 처럼 메세지를 넘겨 버리는 것을 알 수 있다.
하지만 무작정 Enter를 친다고 Right Key가 눌려진 것 처럼만 한다면 어떻게 될까?

맨 마지막 컬럼에서 EnterKey를 치게 되면 원래 ProcessRightKey의 기본 행태인 다음 행의 동일한 컬럼으로 포커스가 이동되고 만다.
하지만 원래 우리가 원하는 것은 맨 마지막 컬럼까지 포커스가 이동했다면, 다음번 EnterKey에는 그 다음 행의 첫번째 컬럼으로 가는 것이 보기도 좋고,
기본적으로 어플리케이션 사용자들이 그리드에서 다수의 데이터를 입력하고자 할때 편의를 제공해 줄 수 있을 것이다.

그래서 일반적은 경우에는 ProcessRightKey를 호출하지만, CurrentCell이 마지막 컬럼에 위치하고 있을 경우에는 직접 CurrentCell을 다음 행의 첫번째
컬럼으로 이동시키게 하는 코드를 추가했다. 또 하나 CurrentCell이 맨 마지막 행, 마지막 컬럼에 위치하고 있다면? 그냥 둔다 <img alt=" src="smilies/happy.gif">

개발자들의 취향에 맞게 고쳐쓰면 될 듯 싶다.

상용 컴퍼넌트를 구매하지 않고 기본 컨트를을 통하여 우리의 입맛에 맞게 바꾸기 위해 이러저러한 궁리와 코딩을 하다보면, 컴퍼넌트 가격이 참 저렴하다라는 생각이 든다.

비싼 개발자들의 인건비를 100만원정도 하는 상용컨트롤 구매와 맞 바꾸려 하다니 -.-
개발자는 자고로 비지니스로직 구현에만 전념할 수 있도록 하면 되거늘... 

여전히 시장선 개발자의 인건비가 X 값이다

에휴우....

# Monday, August 06, 2007
Monday, August 06, 2007 11:36:42 AM (Korea Standard Time, UTC+09:00) ( Microsoft | Team System | visual studio )

vsTeamSystem.png
드디어 Rosario의 첫번째 CTP가 공개 되었다.
Rorario(로사리오)가 뭐냐구? Rosario란 새로운 Microsoft Visual Studio 2008 Team System 의 코드네임이다.

CTP는 Beta와는 달리 안정성 면에서는 실제 프로젝트에서 사용하기에는 불안정한 요소들이 많은 말 그대로 Community Technology Preview(CTP) 를 말한다.

현재 테스트를 해 볼 수 있도록 VPC 이미지(downloading the VPC images)와 White Paper(Rosario CTP whitepaper)를 다운로드 받을 수 있다.

향 후 자세한 정보들은 별도의 MSDN 사이트(http://msdn2.microsoft.com/en-us/teamsystem/bb725993.aspx)를 통해 제공된다고 한다.

MS의 ALM 솔루션의 방향을 미리 가늠해 볼 수 있는 좋은 기회가 될 것으로 생각한다.

# Monday, July 30, 2007
Monday, July 30, 2007 12:15:32 AM (Korea Standard Time, UTC+09:00) ( Microsoft | Vista )

프로젝트를 진행하다 보면 고객사의 네트워크 환경에 따라 메신저가 막혀있거나 Exchange Server에 엑세스 할 수 없는 환경을 많이 접하게 된다.
(물론 Exchange Server 접속은 HTTP over RPC / Exchange Anywhere를 통해 해결하고 있지만 <img alt=" src="smilies/happy.gif"> )
우리 닷엑에서는 이러한 문제점을 해결하기 위해 모든 컨설턴트들에게 HSDPA 모뎀을 제공해 주고 있다.

 

 

 <- 요거.


그런데, 이렇게 두가지 이상의 네트워크 설정을 해 두고 보면 통상적으로 대부분의 패킷은 로컬 랜선을 통해 전달되고, 메신저에 한해서만 비싼~ HSDPA 모뎀 패킷을 이용하고 싶어진다. 이를 위해 통상 사용되는 방법이 네트워크 우선순위 변경!

Windows XP 나 2003에서는 손쉽게 네트워크 환경 설정에서 Advanced 메뉴에서 변경했었는데, 아니 Vista 에서는 도무지 이 메뉴가 보이질 않는다.

한참을 해메다가 찾았다. -.-V

1. Network and Sharing Center 에서 Manage network connections 를 선택.

image

2. 여기서 이전에 보이던 메뉴가 보이질 않는다. 어디있나 Advanced 메뉴!!!

image

3. 당황하지 말고 이 창을 선택하고 ALT키를 눌러보자. -.-
advancedNetwork

4. 이제는 Local 연결이 모뎀연결 보다 Priority를 높일 수 있다.
image

비스타. 익숙해 지려면 아직도  시간이 더 필요하다. <img alt=" src="smilies/happy.gif">

# Sunday, July 29, 2007
Sunday, July 29, 2007 2:53:44 PM (Korea Standard Time, UTC+09:00) ( Microsoft | Office )

3년간의 산고끝에 Microsoft Office Communications Server 2007 , Microsoft Office Communicator 2007 이 RTM 되었다.

OCS, OC가 뭐냐고? OCS란 Microsoft Office Communications Server 그리고 OC는 Microsoft Office Cummunicator를 말한다.
이게 뭐하는 거냐고? 지금껏 마이크로소프트사가 추진한 Information Worker(지식노동자)들을 위한 생산성 향상의 일환으로 조직내의 의사소통(커뮤니케이션)이 Office를 근간으로 보다 긴밀하게 이루어 질 수 있도록 VOIP, 화상회의, IM(Instant Messaging), 웹 상에서의 가상회의 솔루션들을 지원하게 된다.

본 제품들은 10월 16일 샌프란시스코에서 BillG에 의해 공식으로 발표될 예정이다.

OCS, OC 제품은 2007 버전이 첫 제품은 아니다. 하지만 이전 제품과는 달리 VOIP기능이 강화되는 등 보다 강력해 진 기능들이 제공된다.

우리 닷엑에서도 현재 OCS 2007의 RTM을 목빠지게 기다렸었다. 닷엑처럼 모든 인원들이 한 곳에 모이기 쉽지 않은 회사의 경우에는 이러한 솔루션이 아주 요긴하게 사용될 수 있을 것이다.

 <- 요게 뭘까?
위의 사진은 OCS를 통한 화상 회의를 진행할 때 사용되는 전용 통신기기이다. 일반 IP폰과 비슷하게 생겼지만 하나 흥미로운 특징은 카메라다.
이 카메라는 음성을 인식하여 Round Table 등과 같은 곳에서 원격 화상 회의를 진행할때 현재 말하고 있는 사람에게 자동으로 카메라를 돌려주는 기능을 가지고 있다.

OCS와 OC를 이용한 어플리케이션 개발 역시 눈여겨 봐야 할 부분 중의 하나이다.

우리의 어플리케이션에서 자동으로 메신저와 연동하거나, 팀 공동작업의 생산성을 높일 수 있는 여러가지 아이디어를 찾아낼 수 있을 것이다.

현재 SDK를 다운로드 받을 수 있으나, 일부는 현재까지 RC(Release Candidate) 상태로 이용 가능하다.

이 녀석들은 현재 RTM 으로 다운로드 할 수 있으며,

이 녀석은 현재 RC 로 사용이 가능하다.

하지만 둘 모두 오늘 RTM된 OCS 와 OC를 개발 할 수 있다.

금 주 중으로 우리 회사에서도 OCS를 깔아 볼까 한다.

# Friday, July 27, 2007
Friday, July 27, 2007 10:14:17 AM (Korea Standard Time, UTC+09:00) ( .net | Microsoft | visual studio )

Vstudio2008.png

Orcas Beta2 버전이 public open 되었습니다.

http://go.microsoft.com/?linkid=7175498

 

이번 주 에는 이 녀석과 함께 보내게 되겠군요 <img alt=" src="smilies/happy.gif">

Happy downloading~

# Friday, July 06, 2007
Friday, July 06, 2007 6:30:40 PM (Korea Standard Time, UTC+09:00) ( blog )
blog_screen5.jpg MSN Alert 서비스는 MS Passport 인증과 함께 실제 서비스를 위해서는 상당한 금액을 지불해야 가능했었다.
또한 이 글을 쓰기 전까지 그렇게 알고 있었다.

오.. 세상에 이렇게 쉽게 접근할수 있게 되다니!!

2001년 가을 DX식구들과, 당시 MS의 유상용 부장님, 이건복 과장님(현재는 닷엑의 부사장님 <img alt=" src="smilies/happy.gif"> ) 과 함께 개발하고 발표한 MyWebService.NET을 개발할 때만 해도 Alert 서비스를 구현하기 위해서는 상당히 까다로운 절차와 세심한 코딩이 요구되었다.

심지어 데모를 위한 Toaster(이름이 딱이지? <img alt=" src="smilies/happy.gif"> - 이름하여 야매~ Alert!)를 만들어야 했던 가슴아픈 기억이....

이제는 MSN Alert 서비스의 문턱이 상당히 낮아 졌다. 심지어 개발자가 아닌 일반 블로거들 조차 간단한 등록 절차만을 거치면 자신의 블로그의 Update 상태를 관심있는
지인들(물론 MSN에 가입되어 있어야 함을 전제로 한다) 에게 전할 수 있게 되었다.

http://signup.alerts.live.com/brochure/index.jsp 
(세상에!!! 여기 MS 서비스를 하는데 맞아? 피싱아녀? 아니다 -.- 정말 이해할 수가 없다... jsp 라뉘...)

Alert 서비스를 구현하기 위해 애써본 경험이 있는 개발자들이라면 이런 서비스가 이렇게 우습게(?) 구현된다는 것에 대해 허탈함마져 느끼게 한다 <img alt=" src="smilies/happy.gif">
RSS 를 제공하는 사이트라면 어느곳에건 사용이 가능하다.

funnyfox의 Blog에 구독을 원하시면, 좌측 메뉴에 아래 그림과 같은 "Windows Live Alerts" 버튼을 꾸욱 눌러 등록해 주시라~

Capture.JPG

블로거들에게는 강추!


# Thursday, June 28, 2007
Thursday, June 28, 2007 1:28:31 PM (Korea Standard Time, UTC+09:00) ( .net | iis )

비스타에서 IIS를 이용해 웹 어플리케이션 디버깅을 하려면 무척 번거로운 작업들을 거쳐야만 가능했다.
http://support.microsoft.com/kb/937523

짜증나는 작업들은 이제 그만 <img alt=" src="smilies/happy.gif">

다운로드는 여기에서!
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=7250


# Wednesday, March 07, 2007
Wednesday, March 07, 2007 8:23:42 PM (Korea Standard Time, UTC+09:00) ( .net | Microsoft )

각 제품군들의 빠른 변화가 가끔한 혼동스런 결과를 가져오기도 한다 <img alt=" src="smilies/happy.gif">

드디어 나왔다. VS 2005 SP1 for Windows Vista.

http://www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&displaylang=en

Wednesday, March 07, 2007 1:29:51 PM (Korea Standard Time, UTC+09:00) ( .net | Microsoft )

중국의 요청이였으리라 확신이 되지만, 어딘지 씁쓸한 생각이 드는 메서드명이다..

http://msdn2.microsoft.com/en-us/library/ms441219.aspx

타이완. 개인적으로는 그 나라의 탄생 배경이 그리 달갑지만은 않지만, 그렇다고 숨길수도, 지워버릴 수도 없는
사실을...

Hide고구려(); Hide고조선();

자신들의 양심도, 자존심들 마져도 Hide 하려는 생각은 아닐까...