저는 델파이 7 프로젝트에서 일하고 있는데 언어 나 런타임에 친숙하지 않습니다. 폼이 표시되고 칠해 지기도하지만 어떤 이유로 OnShow 이벤트가 호출되지 않는 문제를 디버깅하려고합니다. 어떤 경우에 이런 일이 일어날 수 있습니까? 정확히 어디에서 봐야합니까?TForm에 대해 OnShow를 호출하지 않는 이유는 무엇입니까?
답변
나에게 맞는 유일한 설명은 OnShow 이벤트가 처리기에 올바르게 연결되어 있지 않다는 것입니다. Object Inspector 또는 .dfm 양식을 체크인하십시오. 코드로 연결하는 경우 충분히 일찍 연결하십시오. 폼이 좀 프로젝트를 조사 중에 과거에 그런 일을 보았다
ShowWindow(Form.Handle, SW_SHOW);
로 표시 될 때
+1. 이것이 가장 가능성있는 범죄자입니다. 단순히 "OnShow"라는 이름의 메소드 또는 충분하지 않은 메소드 만 있으면됩니다. 그것은 어떻게 든 이벤트에 묶여 있어야합니다. –
dfm (오브젝트 인스펙터) – Earlz
+1에 바인딩되어 있습니다. 이것보다 명확한 답은 없습니다. 전에이 문제가 발생합니다. – XBasic3000
여기에서 확인하십시오.
주먹 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 또는 함수 이름을 사용하십시오.
)의 모든 것이 동일합니다. 올바른 함수 이름을 참조하고 이벤트가 dfm에 있습니다. – Earlz
형태가로드 및 모든 구성 요소는
protected
procedure Loaded; override;
그것은 양식 작성시이라고
로드 사용할 수 초기화되어 있는지 확인 할 때 당신은 어떤 일을하고 싶습니다.OnActivate에서 발생할 수있는 폼의 느린 빌드없이 폼이 팝업으로 표시된다는 추가적인 이점이 있습니다.
개체 관리자를 사용하여 설정 한 OnShow 처리기를 호출하지 않은 경우 프로그램 실행 중에 다른 설정자가 처리기를 할당했기 때문에 코드에서 OnShow에 가능한 할당을 찾을 수도 있습니다.
'OnShow'가 필요한 것이고, 아마도 'OnActivate'와 혼동을 느낄 것입니까? – ain
@ain 예. 양식이 표시 될 때 초점이 맞춰질 때뿐만 아니라 어떤 작업을해야합니다. – Earlz