線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1088
推到 Plurk!
推到 Facebook!

有關Button傳遞訊息問題

尚未結案
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-24 21:49:17 IP:61.31.xxx.xxx 未訂閱
各位好    小地有個問題想請教一下 假設有兩個form;(form1,form2) form1上有button1 我想要按下form1的button1後 在form2接收到form1的button1訊息後  去做某個動作 我知道多設個變數就可解決  可是還要多個變數 是否可以在form2上 可以接收到button1訊息的方法呢?? ex:
 
if(form1的button1按下後)  // 在form2裡面
{  
    // Do Something...
}  
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-24 22:48:01 IP:219.68.xxx.xxx 未訂閱
您好: 反向思考一下,當Form1的Button按下後直接去呼叫Form2的Button的Event就可以了。 void __fastcall TForm1::Button1Click(TObject *Sender) { Form2->Button1Click(Sender); }
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-27 16:29:55 IP:202.181.xxx.xxx 未訂閱
Dear supman:    因為我在form2裡面程式要寫在MonthCalendar1Click 事件裡面 form1裡面有兩個edit 及 button 當各按下任一 button時會出現月曆以供使用者選擇 如使用您的方法還是需要再form2裡的MonthCalendar1Click裡面去判斷哪個button所按下的 我目前是想這樣做
 // In Form1
void __fastcall TForm1::SpeedButton14Click(TObject *Sender)
{
 Form3->Show();
}
//------------------------------------------------------------------
void __fastcall TForm1::SpeedButton22Click(TObject *Sender)
{
 Form3->Show();
}    // ~~~~  In Form2
void __fastcall TForm2::MonthCalendar1Click(TObject *Sender)
{
  if(form1裡的button1按下 == true)  // 這裡不知道怎麼去判斷
  {
    Form1->MaskEdit1->Text=Form2->MonthCalendar1->Date;
  }
  if(form1裡的button2按下 == true)
  {
    Form1->MaskEdit2->Text=Form2->MonthCalendar1->Date;
  }
}
不曉得我這樣做可以嗎?/ 是否有更好的做法呢>?? 謝謝supman回應..
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-28 00:20:20 IP:219.68.xxx.xxx 未訂閱
您好: 按照您的寫法是可以,以下程式碼您參考一下
Unit1
//---------------------------------------------------------------------------    #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->Show();
Form2->MonthCalendar1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form2->Show();
Form2->MonthCalendar1Click(Sender);
}
//---------------------------------------------------------------------------    Unit2
//---------------------------------------------------------------------------    #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::MonthCalendar1Click(TObject *Sender)
{
if (((TButton *)Sender)->Name=="Button1") ShowMessage("Button1");
if (((TButton *)Sender)->Name=="Button2") ShowMessage("Button2");
}
//---------------------------------------------------------------------------
但我覺得這種寫法很有問題。 1.您的Form必須要用Show的方式否則無效。 2.他還是依靠著Click中所傳入的Sender去達到,也就是說,不可能無緣無故經由From1丟一個訊息出來,沒有任何變數去接收,但又可以讓您想用就用。 3.如果是模組化,您的Form2不應該回頭存取Form1的資料,如果是這樣則Form2就沒辦法再利用,因該是經由Form1去初始化Form2才對。
andychang1690
資深會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-28 01:05:12 IP:221.169.xxx.xxx 未訂閱
odyaho:可以利用button的屬性Tag(內定是0),
你可以於button的OnClick事件中
if (button1->Tag) // button->Tag不為0
  button1->Tag=0; // 取消按下
else
  button1->Tag=1; // 按下
如此於Form2隨便你玩!
// ~~~~  In Form2
void __fastcall TForm2::MonthCalendar1Click(TObject *Sender)
{
  if(Form1->button1->Tag)  // form1裡的button1按下
  {
    Form1->MaskEdit1->Text=Form2->MonthCalendar1->Date;
  }
  if(Form1->button2->Tag) // form1裡的button2按下
  {
    Form1->MaskEdit2->Text=Form2->MonthCalendar1->Date;
  }
}
請參考!    
Andy Chang
------
Andy Chang
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-28 15:22:32 IP:202.181.xxx.xxx 未訂閱
多謝supman , andychang1690熱心指導 問題已解決 我參考andychang1690的方法  最後再加上 button1->Tag=0; 來reset就ok了    以後還請各位先進不吝指教 感恩...  
系統時間:2024-11-22 16:14:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!