none
윈폼 컨트롤 데이터 바인딩 해제방법 및 해제후 포커스 문제 RRS feed

  • 질문

  • switch(SQLFlag)
                {
                    case CommandFlag.Register:
                        if(!(PositionCodeBox.DataBindings["Text"] == null))
                        {
                            PositionCodeBox.DataBindings.Remove(PositionCodeBox.DataBindings["Text"]);
                            PositionNameBox.DataBindings.Remove(PositionNameBox.DataBindings["Text"]);
                        }
                        
                        PositionCodeBox.Text = "";
                        PositionNameBox.Text = "";
                        PositionCodeBox.Enabled = true;
                        PositionUpdateButton.Enabled = false;
                        PositionDeleteButton.Enabled = false;
                        PositionRegisterButton.Enabled = true;
                        break;
                    case CommandFlag.Update:
                        positionTable.Clear();
                        Fill(positionTable);
                        PositionNavigator.BindingSource = source;
                        PositionCodeBox.DataBindings.Add("Text", source, "PositionID");
                        PositionNameBox.DataBindings.Add("Text", source, "PositionName");
                        PositionCodeBox.Enabled = false;
                        source.MoveFirst();
                        PositionUpdateButton.Enabled = true;
                        PositionDeleteButton.Enabled = true;
                        PositionRegisterButton.Enabled = false;
                        break;
                }

    컨트롤에 데이터바인딩을 했다가 필요에 의해 바인딩을 제거한 후 수동으로 text 속성의 값을 입력할려하는데

    뭐가 이미 입력되어있는것으로 인식하는건지 직분코드에 포커스가 시작하는게 아니라 직분명으로 가서 포커스가 시작되네요;;

    2016년 5월 31일 화요일 오후 2:50

모든 응답

  • 안녕하세요.

    전체코드를 몰라서 일단 코드만 보고 말씀드립니다.

    값을 제거하셨다는 말로 봐서는 초기화 부분이 있는

    case CommandFlag.Register: 를 이야기 하시는것 같은데

    case CommandFlag.Register: if(!(PositionCodeBox.DataBindings["Text"] == null)) { PositionCodeBox.DataBindings.Remove(PositionCodeBox.DataBindings["Text"]); PositionNameBox.DataBindings.Remove(PositionNameBox.DataBindings["Text"]); } PositionCodeBox.Text = ""; PositionNameBox.Text = ""; PositionCodeBox.Enabled = true; PositionUpdateButton.Enabled = false; PositionDeleteButton.Enabled = false; PositionRegisterButton.Enabled = true;

    PositionCodeBox.Focus(); break;

    처리후에 직분코드 컨트롤에 포커스를 강제로 할당하면 안되나요?

    다른방법이 필요하시면 다시한번 문의 주십시오.

    MoveFirst 등의 지정을 통해서 포커스를 강제 이동시킬수도 있습니다만, Index 지정이 어떻게 되어있는지도 화면전체를 보지않으면 모르겠는데... 일단 등록버튼이 Index 최후의 번호라고 가정하더라도, Z 형태로 Indexing 룰에 의거해서 만들어진 화면이라면, 1 / 2 의 왼쪽, 오른쪽 화살표에 포커스가 할당되어 있을수도 있기에 MoveFirst 로 될지 안될지도 확답을 못드리겠네요.

    현재 상태로 가장 정확한 방법은

    1. 로직에 의해서 직분등록을 눌렀을때, 최후 처리부분의 일관으로써 입력값을 클리어해준다.

    2. 처음 화면을 열었을때와 동일한 상태?로 해주기 위해서 직분코드 텍스트박스에 포커스를 할당해준다.

     

    제가 파악한게 맞다면, 2번이 안되고 있어보이네요.

    그렇다면, 위의 방법을 우선, 추천해드립니다.


    프로그램 개발에는 정답이 없다.

    2016년 6월 1일 수요일 오전 2:09
  • Focus()는 이미 해보았는데 적용이 안됩니다.
    2016년 6월 1일 수요일 오전 11:30