2011-09-21 3 views
0

저는 델파이 7 프로젝트에서 일하고 있는데 언어 나 런타임에 친숙하지 않습니다. 폼이 표시되고 칠해 지기도하지만 어떤 이유로 OnShow 이벤트가 호출되지 않는 문제를 디버깅하려고합니다. 어떤 경우에 이런 일이 일어날 수 있습니까? 정확히 어디에서 봐야합니까?TForm에 대해 OnShow를 호출하지 않는 이유는 무엇입니까?

+0

'OnShow'가 필요한 것이고, 아마도 'OnActivate'와 혼동을 느낄 것입니까? – ain

+0

@ain 예. 양식이 표시 될 때 초점이 맞춰질 때뿐만 아니라 어떤 작업을해야합니다. – Earlz

답변

4

나에게 맞는 유일한 설명은 OnShow 이벤트가 처리기에 올바르게 연결되어 있지 않다는 것입니다. Object Inspector 또는 .dfm 양식을 체크인하십시오. 코드로 연결하는 경우 충분히 일찍 연결하십시오. 폼이 좀 프로젝트를 조사 중에 과거에 그런 일을 보았다

ShowWindow(Form.Handle, SW_SHOW); 

로 표시 될 때

+0

+1. 이것이 가장 가능성있는 범죄자입니다. 단순히 "OnShow"라는 이름의 메소드 또는 충분하지 않은 메소드 만 있으면됩니다. 그것은 어떻게 든 이벤트에 묶여 있어야합니다. –

+0

dfm (오브젝트 인스펙터) – Earlz

+0

+1에 바인딩되어 있습니다. 이것보다 명확한 답은 없습니다. 전에이 문제가 발생합니다. – XBasic3000

1

에서 onShow 이벤트가 호출되지 않습니다 하나 더 가능성이있다, 그건 정말 델파이에 대한 나쁜 생각입니다.

+0

SW_SHOW *가 포함됩니다 (NOACTIVE 등) – Earlz

+0

예.이 가능성을 확인하려면 프로젝트에서 "SW_SHOW"문자열을 검색 할 수 있습니다. – Mike

+0

우리 프로젝트에서 우리가 참조하는 .. .. ( – Earlz

0

여기에서 확인하십시오.

주먹 OnShow()는 반드시 해제해야합니다. 둘째

type 
    TForm2 = class(TForm) 
    procedure FormShow(Sender: TObject); // <--- IM HERE! 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

...

implementation 

{$R *.dfm} 

procedure TForm2.FormShow(Sender: TObject); <--- IM HERE! 
begin 
//this time will trigger 
end; 

과 마지막, 당신은 아직도 그것을 참조 할 수 있습니다 작동하지 않는 경우 DFM이 FormShow 이벤트

object Form2: TForm2 
    Left = 0 
    Top = 0 
    Caption = 'Form2' 
    ClientHeight = 284 
    ClientWidth = 418 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    OnShow = FormShow  <--- IM HERE! without this it will not trigger the OnFormShow 
    PixelsPerInch = 96 
    TextHeight = 13 
end 

을 찾아 열어야합니다 다른 함수 이름으로 OnShow = FormStart 또는 함수 이름을 사용하십시오.

+0

)의 모든 것이 동일합니다. 올바른 함수 이름을 참조하고 이벤트가 dfm에 있습니다. – Earlz

0

형태가로드 및 모든 구성 요소는

protected 
    procedure Loaded; override; 

그것은 양식 작성시이라고

로드 사용할 수 초기화되어 있는지 확인 할 때 당신은 어떤 일을하고 싶습니다.

OnActivate에서 발생할 수있는 폼의 느린 빌드없이 폼이 팝업으로 표시된다는 추가적인 이점이 있습니다.

0

개체 관리자를 사용하여 설정 한 OnShow 처리기를 호출하지 않은 경우 프로그램 실행 중에 다른 설정자가 처리기를 할당했기 때문에 코드에서 OnShow에 가능한 할당을 찾을 수도 있습니다.