偶在主单元main.pas里定义了
private
str:string;
{ Private declarations }
public
function getstr:string;
{ Public declarations }
end;
在一个procedure里写了:str:='Demo';
在另一个单元other.pas
uses main;然后在一个procedure里写了下面语句:
ShowMessage(main.MainForm.getstr);开始还是可以的,在other.pas单元可以出现一个显示为'Demo'的对话框……可是不知道怎么回事,第N次运行时发现在other.pas单元showMessage意外的得出的是个空字符!!这是怎么回事阿?? 开始还是可以SHowMessage出主单元main.pas定义的私有变量str的,怎么又不行了那??大虾救偶阿!!!偶以为是str可能在某个地方被更改了,所以偶又在main单元定义个私有变量str1:string
定义了个公共function getstr1;在other.pas写上showMessage(main.mainform.getstr1),得出的还是空字符……怎么回事阿??????帮帮偶阿!!偶快疯了是不是Delphi的编译器的问题阿??偶都重启几次了还是那样阿
private
str:string;
{ Private declarations }
public
function getstr:string;
{ Public declarations }
end;
在一个procedure里写了:str:='Demo';
在另一个单元other.pas
uses main;然后在一个procedure里写了下面语句:
ShowMessage(main.MainForm.getstr);开始还是可以的,在other.pas单元可以出现一个显示为'Demo'的对话框……可是不知道怎么回事,第N次运行时发现在other.pas单元showMessage意外的得出的是个空字符!!这是怎么回事阿?? 开始还是可以SHowMessage出主单元main.pas定义的私有变量str的,怎么又不行了那??大虾救偶阿!!!偶以为是str可能在某个地方被更改了,所以偶又在main单元定义个私有变量str1:string
定义了个公共function getstr1;在other.pas写上showMessage(main.mainform.getstr1),得出的还是空字符……怎么回事阿??????帮帮偶阿!!偶快疯了是不是Delphi的编译器的问题阿??偶都重启几次了还是那样阿
解决方案 »
- Delphi2010或者Delphi2011(XE)的多点触控,有哪位大侠研究的?
- 我这个自定义类的析构函数怎么写?
- 如何在delphi中把汉字插入到SOL Server 2000的表中
- 怎麼樣取得Form上所有帶Caption屬性的控件並取得它們的Caption屬性?
- DBgrid中要判断用户输入的资料是否合法,不合法时焦点不允许离开.应该在哪里写代码?
- DBGrid选中多行时怎么判断某一行是否选中?然后对该行操作!
- 如何让TDateTimePicker变平,也就是相当于TEdit的Ctl3D:=False
- 请问两个问题,谢谢大家
- 问两个关于delphi的基础问题
- 谁有imagxpress6.0的注册码,大送分
- 哪些控件有将自己的文字内容直接拷贝到clipbord中的功能?
- 怎样将report格式的listview中的文字拷贝到剪贴板中?
//----------------------------
main.pas:
Type
TMainForm=class(Form)
...
...
...
private:
str:string;
Public:
function getStr:string;
implementation
....
function TMainForm.getStr:string;
begin
result:= str;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
str:='demo';
end;//---------------------------
other.pas:
Type
Totherform=class(form)
...
...
implementation
uses main;procedure TMainForm.Button1Click(Sender: TObject);
begin
showMessage(main.mainform.getstr);
end;这应该是没错误的,因为偶重新建立了一个工程,把上面的语句试了没问题……
可是在偶原来的那个程序中问题还是存在阿!这是怎么回事阿 ?????????偶快疯了!!!
begin
showMessage(main.mainform.getstr);
end;运行的时候MainForm是不是还在呀?是不是你已经Free了?
偶在工程文件中:
program Project;uses
Forms,
main in 'main.pas' {MainForm},
newsubwin in 'newsubwin.pas' {NewForm},
addindex in 'addindex.pas' {addindexForm};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TMainForm, MainForm); //错误在这里,重复创建了两个MainForm应用
Application.CreateForm(TNewForm, NewForm);
Application.CreateForm(TaddindexForm, addindexForm);
Application.Run;
end.天哪~~~偶郁闷阿
可是这样
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TMainForm, MainForm);
两次为什么会导致其他单元引用不了该单元的私有字符变量阿?得到的总是空字符?WHY???大虾教偶~~!!!
而unit2的Interface的Uses单元加入了unit3书上说这样就可以在unit1中直接调用unit3的东西了而不用再加入uses unit3了,因为unit2在interface的USes单元声明了unit3了可是偶做了 发现不对,编译的时候编译器提示在unit1单元发现了form3,问是否在implementation下加入uses Unit3的声明……这是怎么回事嗄?
大侠请解答~
在implementation下声明:
uses main;
就bye-bye了吧!!!
而unit2的Interface的Uses单元加入了unit3书上说这样就可以在unit1中直接调用unit3的东西了而不用再加入uses unit3了,因为unit2在interface的USes单元声明了unit3了上面说的是对的吗????偶看到很多书上都是这样说嗄~~~~请高手回答!!
而unit2的Interface的Uses单元加入了unit3书上说这样就可以在unit1中直接调用unit3的东西了而不用再加入uses unit3了,因为unit2在interface的USes单元声明了unit3了上面说的是对的吗????偶看到很多书上都是这样说嗄~~~~请高手回答!!明确的高苏你,不行!至于这样申明的危害主要是:可能导致循环引用
可能导致重复引用
可能造成接口的混乱,代码难以维护
还可能造成单元的紧耦合,难以调试!
在delphi,要用unit3的方法或者属性,必须引用unit3:
uses unit3;
感谢foot大哥在QQ上热心的帮助偶!