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

OnShow事件中 如何Close Form?

答題得分者是:Zard
jimmyliu97
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-22 11:06:02 IP:61.219.xxx.xxx 未訂閱
各位好 小弟初學BCB 遇到一個問題 我在一個Form Onshow的事件中 做了一些判斷 如果判斷沒有過 我要把這Form給Close 可是 訊息顯示 無法在Onshow Onhide 下Close()的指令 請問我該怎麼做呢?! 發表人 - jimmyliu97 於 2004/10/22 11:08:29
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-22 11:43:23 IP:61.63.xxx.xxx 未訂閱
引言: 各位好 小弟初學BCB 遇到一個問題 我在一個Form Onshow的事件中 做了一些判斷 如果判斷沒有過 我要把這Form給Close 可是 訊息顯示 無法在Onshow Onhide 下Close()的指令 請問我該怎麼做呢?! 發表人 - jimmyliu97 於 2004/10/22 11:08:29
jimmyliu97你好: 應該是可以的: < class="code"> void __fastcall TForm1::FormShow(TObject *Sender) { if (!FileExists("C:\\test.txt")) Close(); } 不曉得你的問題?還是你要post一下你的source code?
jimmyliu97
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-22 12:29:15 IP:61.219.xxx.xxx 未訂閱
jimmyliu97你好: 應該是可以的: < class="code"> void __fastcall TForm1::FormShow(TObject *Sender) { if (!FileExists("C:\\test.txt")) Close(); } 不曉得你的問題?還是你要post一下你的source code? [/
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-22 12:46:23 IP:210.243.xxx.xxx 未訂閱
引言: 剛剛忘記說的詳細些 我是做了個TrayIcon的程式 在點選Menu選單後 會Show其中一個Form 在Form的OnShow事件中 加上這段判斷 會出現下面的訊息 而Form依然會顯示出來 我的目的是要將其Close PS:不好意思 圖案上傳不了 他會秀出 Cannot change Visible in Onshow or OnHide.
會發生這種錯誤是因為你所關閉的form不是主form, 若是主form則m8815010所用的方法就可以了, 所以你的程式可以改為如下:
// Unit1.cpp
#include 
#pragma hdrstop    #include "Unit1.h"
#include "Unit2.h"    #pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;    __fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Form2 = new TForm2(this);
  Form2->Visible = TRUE;
}    ///////////////////////////////////////////////    // Unit2.cpp    #include 
#pragma hdrstop    #include "Unit2.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;    __fastcall TForm2::TForm2(TComponent* Owner)
  : TForm(Owner)
{
}    void __fastcall TForm2::FormShow(TObject *Sender)
{
  Close();
}    void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action = caFree;
}    
其中主form 為 Form1, 而Form1上的Button1按下後會動態產生 Form2, 若用上方的寫法就可以在Form2 的 OnShow 下Close().
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-22 12:50:50 IP:211.23.xxx.xxx 未訂閱
引言: 會發生這種錯誤是因為你所關閉的form不是主form, 若是主form則m8815010所用的方法就可以了, 所以你的程式可以改為如下:
// Unit1.cpp
#include 
#pragma hdrstop    #include "Unit1.h"
#include "Unit2.h"    #pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;    __fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Form2 = new TForm2(this);
  Form2->Visible = TRUE;
}    ///////////////////////////////////////////////    // Unit2.cpp    #include 
#pragma hdrstop    #include "Unit2.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;    __fastcall TForm2::TForm2(TComponent* Owner)
  : TForm(Owner)
{
}    void __fastcall TForm2::FormShow(TObject *Sender)
{
  Close();
}    void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action = caFree;
}    
其中主form 為 Form1, 而Form1上的Button1按下後會動態產生 Form2, 若用上方的寫法就可以在Form2 的 OnShow 下Close().
補充一點, 記得把Form2從 Project設定中的Auto-Create Form List中移掉, 別忘了你現在是要動態產生Form2
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-22 12:53:39 IP:61.63.xxx.xxx 未訂閱
引言: jimmyliu97你好: 應該是可以的: < class="code"> void __fastcall TForm1::FormShow(TObject *Sender) { if (!FileExists("C:\\test.txt")) Close(); } 不曉得你的問題?還是你要post一下你的source code? < face="Verdana, Arial, Helvetica"> m8815010 謝謝您的回應 我用您的這段Code也是會發生相同的問題 就用您這段Code吧 我只是很簡單的判斷 if (!FileExists("C:\\test.txt")) Close(); } 剛剛忘記說的詳細些 我是做了個TrayIcon的程式 在點選Menu選單後 會Show其中一個Form 在Form的OnShow事件中 加上這段判斷 會出現下面的訊息 而Form依然會顯示出來 我的目的是要將其Close PS:不好意思 圖案上傳不了 他會秀出 Cannot change Visible in Onshow or OnHide. [/quote] jimmyliu97你好: 不是很瞭解你的程式,可能要全部> >!
jimmyliu97
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-22 14:30:30 IP:61.219.xxx.xxx 未訂閱
m8815010 不好意思 程式碼有點多 不過我用了一個差不多的 http://my.so-net.net.tw/jimmyliu97/test.rar 您下載看看 Zard 謝謝您喔 正在試您的方法 ^^
jimmyliu97
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-22 18:23:41 IP:61.219.xxx.xxx 未訂閱
Zard 試過您的方法 確實是可以的 謝謝 ^^
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-22 18:35:31 IP:221.169.xxx.xxx 未訂閱
對不起!只是插個花!使用 PostQuitMessage(WM_QUIT); // 代替 Close(); 是不是方便些! 對不起,連主Form一起關掉!
------
Andy Chang
系統時間:2024-07-01 20:01:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!