在线等:如何根据用户选定的菜单项显示不同的Panel? ( 积分: 100 )

  • 主题发起人 主题发起人 冰冷的雨
  • 开始时间 开始时间

冰冷的雨

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我在主窗体上做了一些Panel,每个Panel对应一个菜单项,并设置了它们的Tag
总的思路是每选一次菜单项,就把对应的Panel.Visible设为True,
其余的Panel.Visible设为False

程序中这样写:
procedure TfrmMain.WorkAreaMg(WorkArea: integer);
var
Index: integer;
begin
for Index:=0 to ControlCount-1 do
begin
// showmessage((frmMain.Components[Index] As TObject).Name);
if Components[Index] is TPanel then
if (Components[Index] As TPanel).Tag=WorkArea then
(Components[Index] As TPanel).Visible := True
else
(Components[Index] As TPanel).Visible := False;
end;
end;
用上述方法中带//的那句调试,发现ControlCount是第一个Panel中控件的个数,
Components[Index]取得的是第一个Panel里面的控件,而不是主窗体frmMain上的。
是哪里出了问题?
2、三层结构中,客户端调用应用服务器上定义的方法,是在应用服务器还是客户端上
执行?比如应用服务器上提供了一个方法GetLocalIP,其作用是取本地IP地址,在客户
端调用该方法后,取得的IP地址会是应用服务器所在机器上的还是客户端所在机器上的?
 
1、我在主窗体上做了一些Panel,每个Panel对应一个菜单项,并设置了它们的Tag
总的思路是每选一次菜单项,就把对应的Panel.Visible设为True,
其余的Panel.Visible设为False

程序中这样写:
procedure TfrmMain.WorkAreaMg(WorkArea: integer);
var
Index: integer;
begin
for Index:=0 to ControlCount-1 do
begin
// showmessage((frmMain.Components[Index] As TObject).Name);
if Components[Index] is TPanel then
if (Components[Index] As TPanel).Tag=WorkArea then
(Components[Index] As TPanel).Visible := True
else
(Components[Index] As TPanel).Visible := False;
end;
end;
用上述方法中带//的那句调试,发现ControlCount是第一个Panel中控件的个数,
Components[Index]取得的是第一个Panel里面的控件,而不是主窗体frmMain上的。
是哪里出了问题?
2、三层结构中,客户端调用应用服务器上定义的方法,是在应用服务器还是客户端上
执行?比如应用服务器上提供了一个方法GetLocalIP,其作用是取本地IP地址,在客户
端调用该方法后,取得的IP地址会是应用服务器所在机器上的还是客户端所在机器上的?
 
用ControlPage会比较好。。一样的效果。。。
 
为什么不用TTabControl控件呢
服务器所在机器上的IP地址
 
FindComponent('控件名').visible:=true可以实现,最好不要你那么用
 
TO huangheqing:不好意思,给错分了。请到
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2479487 接分
 
// Components[Index] 这个我已经是不用的了..自己做控件数组的
// 不知合不合你的意了
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls;

type
TPanelP = ^TPanel;

type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
MainMenu1: TMainMenu;
N11: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N31: TMenuItem;
N41: TMenuItem;
N51: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N21Click(Sender: TObject);
private
{ Private declarations }
PanelPS : Array[1..5] of TPanelP;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
PanelPS[1] := @(Panel1);
PanelPS[2] := @(Panel2);
PanelPS[3] := @(Panel3);
PanelPS[4] := @(Panel4);
PanelPS[5] := @(Panel5);
end;

procedure TForm1.N21Click(Sender: TObject);
// 所有的 MenuItem 的 OnClikc 事件
var
i : Integer;
GTag : Integer;
begin
GTag := TMenuItem(Sender).Tag;

for i := 1 to 5 do
begin
if i = GTag then
PanelPs^.Visible := True
else
PanelPs^.Visible := False;

end;

end;

end.
 
TO gooodlife:您的方法我也用过,就是不想在程序里一个个列举控件,所以改成Components[Index]了。不过还是谢谢啦。
本贴已结,请到http://www.delphibbs.com/delphibbs/dispq.asp?lid=2479487 接分
 
后退
顶部