全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2426
推到 Plurk!
推到 Facebook!

showmodal 的怪问题

 
bjwdxs
一般會員


發表:4
回覆:4
積分:1
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-09-12 21:53:44 IP:218.17.xxx.xxx 未訂閱

我在unit1 create 中 动态创建 登陆界面 LogintDlg

TLogintDlg *LogintDlg;
LogintDlg = new TLogintDlg(Application);
LogintDlg->ShowModal();
delete LogintDlg;

在LogintDlg 中

void __fastcall TLogintDlg::OKBtnClick(TObject *Sender)
{
String sSql = "select * from usermanager ";
sSql = "where username = '" Edit1->Text.Trim() "'";

if(Edit1->Text=="" || Edit2->Text=="")
ShowMessage("文件名,密码不能为空");

else{
ADOQuery1->Close();
ADOConnection1->Close();
ADOQuery1->SQL->Text = sSql;
ADOConnection1->Open();
ADOQuery1->Open();

if(ADOQuery1->IsEmpty())
ShowMessage("没有这个用户");
if(ADOQuery1->FieldByName("password")->AsString != Edit2->Text.Trim())
ShowMessage("密码错误");

}
}

执行的结果 是,用户名不填,弹出MessageBox ("文件名,密码不能为空") 后 LogintDlg 的窗口关闭了,

跟中其代码执行 ,发现 TLogintDlg::OKBtnClick(TObject *Sender) 执行完了,就接着delete LogintDlg;

我百思不解呀

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-09-13 01:18:53 IP:61.229.xxx.xxx 未訂閱
你好,请看注释

我在unit1 create 中 动态创建 登陆界面 LogintDlg

TLogintDlg *LogintDlg;
LogintDlg = new TLogintDlg(Application);
LogintDlg->ShowModal();
delete LogintDlg;

在LogintDlg 中

void __fastcall TLogintDlg::OKBtnClick(TObject *Sender)
{
if(Edit1->Text=="" || Edit2->Text=="")
ShowMessage("文件名,密码不能为空"); //若是true,下面就没有什么程式可以跑了,当然就结束了

else{
........................

} //结束一切了
}

不知你想要的结果是如何? 还有,一般来说modal的form里都要return二种值:
ModalResult = mrOk;
ModalResult = mrCancel;
然后主程序里:
if (LogintDlg->ShowModal() == mrOk)
....................................
delete LogintDlg;

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
bjwdxs
一般會員


發表:4
回覆:4
積分:1
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-09-14 19:34:31 IP:219.134.xxx.xxx 未訂閱

首先要感谢楼上的给的回复。

if(Edit1->Text=="" || Edit2->Text=="")
ShowMessage("文件名,密码不能为空"); // 在这里只是希望给用户一个提示,Edit1,Edit2 必须要填写

并不希望登陆窗口也关掉, 但程序执行的情况是,提示窗口关掉之后,登陆窗口也关掉。这是我不希望的。
顺便说一下, if (LogintDlg->ShowModal() == mrOk) 和 if (LogintDlg->ShowModal() == mrCancel) 执行的情况是一样的。都把我的登陆窗口给关了。

有一点不明白,ModalResult 是我ShowMessage("文件名,密码不能为空"); 的返回值,还是Form的返回值?

bjwdxs
一般會員


發表:4
回覆:4
積分:1
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-09-15 20:10:47 IP:218.18.xxx.xxx 未訂閱

弄明白了:

button有一个ModalResult属性设置,把它设置成了mrOk,mrCancel

只要把它设置成mrNone 就不会出现这样的问题了

herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-09-15 23:31:21 IP:211.72.xxx.xxx 未訂閱

Ans: ShowMessage() 及 Application->MessageBox() 關閉時, Windows 都會傳回一個 Enter(或 Esc)值,

故會造成 Form 額外接收到該 Return 值, 而使主 Form 上之 TButton 或 TBitBtn 對該值做反應.

如果不喜歡將 TButton 的 ModalResult 設為 mrNone, 則須自行製作一個 MyMessageBox 的 Component,

並於其 FormClose() 時, 呼叫另一個自製的 Show() Form 攔截掉該 Return 值, 則 PasswordForm 的

TButton->ModualResult 便可免改為 mrNone.

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-09-16 00:10:00 IP:61.229.xxx.xxx 未訂閱
你好,
1/ ModalResult 正确讲是属于form上的属性。仅管button上也有那个属性,但事实上也是设定form上的那个属性值。只是button上的那个比较方便,比如说你有二个button,button1设成mrOK,button2设成mrCancel,那么按第一个,button就会帮你把form上的ModalResult 设成mrOK,另一个则相反。
2/ 若你只有一个button,那你就要在那个button的onclick事件上依不同的情形直接设定form上的ModalResult值。比如说密码空了,就在ShowMessage( )的正下面写ModalResult =mrCancel。值得注意的是,这时候的button上的ModalResult就只能设定mrNone。因为你已经决定靠自己来设定form上的值而不是靠button自己主动设值!

希望这样解说你会更明白些!
===================引 用 文 章===================

首先要感谢楼上的给的回复。

if(Edit1->Text=="" || Edit2->Text=="")
ShowMessage("文件名,密码不能为空"); // 在这里只是希望给用户一个提示,Edit1,Edit2 必须要填写

并不希望登陆窗口也关掉, 但程序执行的情况是,提示窗口关掉之后,登陆窗口也关掉。这是我不希望的。
顺便说一下, if (LogintDlg->ShowModal() == mrOk) 和 if (LogintDlg->ShowModal() == mrCancel) 执行的情况是一样的。都把我的登陆窗口给关了。

有一点不明白,ModalResult 是我ShowMessage("文件名,密码不能为空"); 的返回值,还是Form的返回值?

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-09-20 17:35:11 IP:211.72.xxx.xxx 未訂閱

Ans: ModalResult 是 ShowModal 的 Form 要傳回給呼叫者 (主 Form) 的值.

系統時間:2024-11-23 12:01:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!