2014-02-23 2 views
0

나는 내 양식에 많은 cxDBButtonEdit을 가지고 있으며 사용자가 Enter 키를 누르면 첫 번째 버튼을 클릭 할 때 원한다.강제로 cxDBButtonEdit을 클릭하는 방법?

나는 어떤 방법, 절차, 기능을 찾아 내려고 노력하고있다.

나는 이런 식으로 만들려고 : 당신은 너무 노력하고

if (ActiveControl is TcxDBButtonEdit) then 
    begin 
     if ((ActiveControl as TcxDBButtonEdit).Properties.Buttons.Count > 0) and ((ActiveControl as TcxDBButtonEdit).Properties.Buttons.Items[0].Enabled) then 
     begin 
     (ActiveControl as TcxDBButtonEdit) <----- HERE 
     try 
      GetParentForm(Screen.ActiveForm).Perform(CM_DIALOGKEY, VK_TAB, 0); 
      Key := #0; 
     except 
     end; 
     end; 
    end; 

감사합니다,

답변

1

합니다. :-)

버튼을 클릭하는 방법에 대해 질문하지만 코드는 탭 보내기 (VK_TAB)를 나타냅니다. 나는 당신이 실제로하고 싶은 것이 확실하지 않으므로 두 가지 모두를 다루려고 노력할 것입니다.

나는 TcxDBButtonEdit에 대해 아무것도 (또는 다른 DevExpress의 컨트롤 중 하나를) 잘 모르겠지만, 이런 일이 (탭 키) 당신을 위해 일해야합니다

if (ActiveControl is TcxDBButtonEdit) then 
begin 
    // We know it's a TcxDBButtonEdit, so we can directly cast it 
    if (TcxDBButtonEdit(ActiveControl).Properties.Buttons.Count > 0) and 
    (TcxDBButtonEdit(ActiveControl.Properties.Buttons.Items[0].Enabled) then 
    begin 
    Key := #0; 
    Self.SelectNext(ActiveControl, True, True); // See notes below 
    end; 
end; 

당신이 원하는 경우 실제로 당신이 버튼의 클릭 핸들러를 호출하기 위해이 작업을 수행 할 수 있다고 말한다 편집 컨트롤, DevExpress support has an article에 부착 된 버튼을 클릭합니다 (위 SelectNext에 대한 호출을 대체) :

if (ActiveControl is TcxDBButtonEdit) then 
begin 
    // We know it's a TcxDBButtonEdit, so we can directly cast it 
    if (TcxDBButtonEdit(ActiveControl).Properties.Buttons.Count > 0) and 
    (TcxDBButtonEdit(ActiveControl.Properties.Buttons.Items[0].Enabled) then 
    begin 
    Key := #0; 
    TcxCustomEditAccess(ActiveControl).DoButtonClick(0); 
    end; 
end; 

(I 명확 위를 컴파일 할 수 없습니다 코드를 가지고 있지 않기 때문에 DevEx 컨트롤; DoButtonClick이라는 전화 번호는 기사에서 가져온 것입니다. 의 '액세스'부분에서

type 
    TcxCustomEditAccess = class(TCxCustomEdit); 

: 컴파일러가 그것에 대해 불평하는 경우, 당신은 아마 당신의 코드에 다음을 추가해야합니다 (바로 그것을 사용하는 코드를 포함하는 방법 위에 아마 최고의 장소입니다) 이름을 보면 DoButtonClickTcxCustomEdit의 보호 된 메소드 일 수 있습니다. 인터 포저 클래스를 선언하면 보호 된 메서드에 액세스 할 수 있습니다) SelectNext에 대한

참고 :. TWinControl.SelectNext 문서

에서

가에서 다음 단계로 현재의 자식 컨트롤에서 입력 포커스 이동을 탭 순서.

자식 컨트롤 포커스를 이동하려면 다음을 선택하십시오. SelectNext는 Tab 순서에서 CurControl 다음에 오거나 앞에오고 다른 매개 변수에 지정된 조건을 충족하는 첫 번째 자식을 선택합니다.

GoForward 매개 변수는 검색 방향을 제어합니다. GoForward가 true이면 FindNextControl은 자식 컨트롤을 탭 순서로 앞으로 검색합니다. GoForward가 false이면 SelectNext는 컨트롤을 역방향으로 검색합니다. 검색은 컬렉션 끝을 지나서 다시 CurControl로 래핑합니다.

CheckTabStop 매개 변수는 SelectNext 컨트롤이 탭 중지인지 여부를 제어합니다. CheckTabStop이 true 인 경우 반환 된 컨트롤의 TabStop 속성을 true로 설정해야합니다. 그렇지 않으면 다음 컨트롤 검색이 계속됩니다.

자식 컨트롤이 검색 조건과 일치하면 해당 컨트롤이 포커스를 가져옵니다. 그러한 자식 컨트롤이 발견되지 않으면 포커스는 변경되지 않습니다.

+0

"클릭 한 번으로"*는 다음 컨트롤을 집중시키는 것을 의미하지 않습니다. 하지만 누가 알고 있는지 :-) 게다가, 그 컨트롤 안에있는 버튼 중 일부 DB 항목 편집기를 표시하거나 직접 클릭 이벤트를 위조하지 않고도 호출 할 수있는 다른 행동을 실행합니다. – TLama

+0

@TLama : 원래 질문의 코드는 제목에도 불구하고 의도 한 것으로 추정되는 탭 키 (VK_TAB)를 보내는 것을 보여줍니다. 내가 말했듯이, 나는 그 통제에 익숙하지 않다. 나는 약 10 년 전 (내가했던 직업에 있었을 때)부터 사용하지 않았다. –

+2

@TLama : 편집 된 답변보기. 그리고 그것을 지적 해 주셔서 감사합니다. :-) –

관련 문제