delphi控件visible使用的一个bug(是否bug)(100分)

  • 主题发起人 主题发起人 btlxy
  • 开始时间 开始时间
B

btlxy

Unregistered / Unconfirmed
GUEST, unregistred user!
1 在一个form1中,有一个page control,可以动态生成tabsheet
2 动态生成form2 ,放置在tabsheet上
3 在form2 中的show事件,可以改变控件的visible
问题:控件的visible=false ,控件可以看见。

form1源码:

unit FormPageForm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin;

type
TForm1 = class(TForm)
ToolBar1: TToolBar;
btnPage: TToolButton;
PageControl1: TPageControl;
procedure btnPageClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses
FormInPage;

procedure TForm1.btnPageClick(Sender: TObject);
var
Form: TForm;
Sheet: TTabSheet;
begin
// create a tabsheet within the page control
Sheet := TTabSheet.Create(PageControl1);
Sheet.PageControl := PageControl1;
// create the form and place it in the tabsheet
Form := TForm2.Create (Application);
Form.BorderStyle := bsNone;
Form.Align := alClient;
Form.Parent := Sheet;
Form. Visible := True;
// activate and set title
PageControl1.ActivePage := Sheet;
Sheet.Caption := Form.Caption;
end;

end.


form2源码:
unit FormInPage;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm2 = class(TForm)
RichEdit1: TRichEdit;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
Edit1.Visible:=False;
Label1.Visible :=False;
Edit2.Visible:=True;
Label2.Visible :=True;

Self.Repaint;

end;

end.


------------------------------
[?]忘各位能帮助解决,谢谢!
 
大家执行时,点击form1中create page 按钮,多次,就可发现问题
 
Edit1.Visible:=False;
Label1.Visible :=False;
Edit2.Visible:=True;
Label2.Visible :=True;
就问这几个控件是哪个FORM上的,
当你创建一个form时,就跟原来那个form不同了,你改变的可能只是新建的form,当你看到的却是原来的form,所以你没发现他隐藏。
 
楼上的正解
 
Edit1.Visible:=False;
Label1.Visible :=False;
Edit2.Visible:=True;
Label2.Visible :=True;
就问这几个控件是哪个FORM上的,

Form2 上的
 
tabsheet的visible 用 TabSheet1.TabVisible := false 处理。

提个建议, 你动态创建了那些tabsheet, 不进行管理, 以后怎么释放???
多次创建后,你知道那个是哪个吗? 为什么不用个list管理那。
 
原因就是楼主原来的form并没有被释放掉,一直在创建新的form2
建议在创建新的form2之前释放原来的
 
呵呵, 看看有几个visible哦.

pagecontrol,tabsheet 可是有好几个visible 的. 依稀记得只设置一个是没用的.
 
后退
顶部