delphi 如何通过单击一个窗体的按钮给一个frame的控件赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 如何通过单击一个窗体的按钮给一个frame的控件赋值相关的知识,希望对你有一定的参考价值。

代码:unit1为form主窗体,unit2为form子窗体,unit3为frame嵌套在form中
unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Unit3, Vcl.StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
Private declarations
public
Public declarations
end;

var
Form1: TForm1;
frame3: TFrame3;
implementation

$R *.dfm

procedure TForm1.Button1Click(Sender: TObject);
begin
if frame3 = nil then
begin
frame3 := TFrame3.Create(Application);
frame3.Parent := Form1;
frame3.Align := alClient;
frame3.Show;
end;
end;
end.

unit Unit3;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
TFrame3 = class(TFrame)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
Private declarations
public
Public declarations
end;

var
frame3: TFrame3;

implementation

$R *.dfm

uses Unit2;

procedure TFrame3.Button1Click(Sender: TObject);
begin
form2.Show();
end;
end.

unit Unit2;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
TForm2 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
Private declarations
public
Public declarations
end;
var
Form2: TForm2;
implementation
uses Unit1,Unit3;
var frame3: TFrame3;
$R *.dfm
procedure TForm2.Button1Click(Sender: TObject);
begin
frame3.Edit1.Text:=Form2.Edit1.Text;
end;
end.

现在执行 frame3.Edit1.Text:=Form2.Edit1.Text;这句时报错:
Access violation at address 008A6B96 in module 'server.exe'. Read of address 000002B0.

设置一个按钮,
点击后弹出另外一个窗体form2。
procedure TForm1.Button1Click(Sender: TObject);
var frm2 : TForm2;
begin
frm2 := TForm2.Create(nil);
frm2.Show;
//或者 frm2.ShowModal;
frm2.Free ;
end;
光标移到按钮的时候,光标变为手指图案(handpoint)
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Button1.Cursor:=crHandPoint;
end;
参考技术A 楼主解决了吗?怎么解决的?

delphi 子窗体传值问题子窗体调用

我想通过MDI窗体实现以下功能:
<简化实例>
主窗体: 一个菜单 menubutton1.
子窗体A: 一个EDIT1控件,一个BUTTON1按钮。
子窗体B: 一个EDIT1控件,一个BUTTON1按钮。
功能说明:
1.点击menubutton1,调出子窗体A。
2.在子窗体A上单BUTTON1按钮弹出子窗体B。 然后给子窗体B的EDIT1控件写入内容,之后点击子窗体B上的BUTTON按钮,让子窗体B的EDIT控件的值传给子窗体A的edit控件。并关闭子窗体B.
3.当子窗体A只弹出一个来时好传值,如果是两个或多个子窗体A,并且要求是“是哪个子窗体A的BUTTON1调出的子窗体B,就让子窗体B的edit值付给哪个子窗体A的edit."<有点像绕口令,请大家仔细看一下应该能明白>

只要实现第3步就可以了。
其实,实际例子是这样的。 我创建了一子窗体A,上边有一个GRID控件。然后创建一个子窗体B,通过在B上的EDIT来付值,用GRID的FILTER来过滤EDIT中会给的值从而实现在GRID中查找筛选数据的功能。
我是这么写的:
在子窗体B的按钮事件中写:"
子窗体A.grid.Filter:=字段+' like '+#39+'%'+trim(edit1.Text)+'%'+#39;
子窗体A.grid.Filted:=true;
.
如果只弹出一个子窗体A是行的.可是如果弹出多个.子窗体A的NAME就变成"子窗体A_1;子窗体A_2;子窗体A_3...这样的了.上边的代码就不行了."这里的代码我该怎么写.我是实在没法了...

我是新手,请各位高手帮忙!事成后加分!
难就难在怎么区别这些窗体名.并把值传过去..有详细代码请告诉我!!!

参考技术A 多个子窗体A,它的form name是不一样的,赋值时只要区别开窗体名就应该可以实现的 参考技术B 也不知道这样的例子对不对,反正我临时写的,你就试试吧。把这些代码有选择性的复制到你的代码编辑器里。自己还要改点东西的。。。
有问题找我+QQ:445159075,我最近也在学delphi哈~
interface

type
tform1=class(tform)
......
主窗口的定义和以下的事件都省略


type
tformb=class(tform)
edit1:tedit;
button1:tbutton;
procedure button1click(sender:tobject);
end;

type
tforma=class(tform)
grid1:tgrid;
edit1:tedit;
button1:tbutton;
procedure button1click(sender:tobject);
end;

var form1:tform1;

implementations
$R.res

procedure tform1.menubutton1click(sender:tobject);
var
forma:tforma;
begin
forma:=tforma.create(self);
forma.name:='子窗体a';
forma.parent:=self;
forma.show;
end;

procedure tforma.button1click(sender:tobject);
var
formb:tformb;
begin
formb:=tformb.create(self);
formb.name:='子窗体B';
formb.parent:=self;
formb.show;
end;

procedure tformb.button1click(sender:tobject);
begin
try
if parent is tforma then
with (parent as tforma) do
begin
edit1.text:=self.edit1.text;
grid1.filter:='';//因为你给的不全我就不写这个了
end;
finally
self.close;//也可以编程使之手动关闭
end;
//剩下的就是你自己原来的程序了
end;

参考资料:《delphi面向对象编程思想》-刘艺著

本回答被提问者采纳

以上是关于delphi 如何通过单击一个窗体的按钮给一个frame的控件赋值的主要内容,如果未能解决你的问题,请参考以下文章

delphi 子窗体传值问题子窗体调用

delphi 如何在两个窗体间切换

delphi 如何获得一个窗体中有多少控件

Delphi7中实现单击Form1中的按钮,弹出Form2并进行Form2中的下一步操作?!

c#如何把子窗体的值传给父窗体?

C#如何将方法传递给基本的WinForm按钮单击事件