Windowsフォーム・コントロールのTextプロパティを別ファイルから書き換える

[戻る]
とるまリンゴ 2006/05/15(月) 15:29:35
VC++2005 CLR Windowsフォーム・アプリケーション プロジェクトに於いて、
Windowsフォームヘッダとは別のファイルからこのフォーム上コントロール
を書き換える方法がわかりません。どなたかご教授願えないでしょうか。


<例:LabelコントロールTextプロパティ書換>

  @Form1.h  <-- Windowsフォームヘッダ

    //ラベルコントロール lblData->Textプロパティ値をグローバル変数
    //文字列で書き換えるpublic関数 funcPub1()用意

    extern g_szTextBuf[];

    useing namespace Test;

    public ref class FormTest : public System::Windows::Forms::Form
    {
        public: Void funcPub1(void) <-- ★
        {
       String^ s = gcnew String( g_szTextBuf );
       lblData->Text = s;
        }
    }

  AfromDisp2.cpp
    // ここの関数から

    char m_strRecvTextDispBuf[256];

    void Func2(void)
    {
       using namespace    Test;
 
        System::Windows::Forms::Form
    FormComData ^ frmCom = gcnew FormComData;
    strcpy(m_strRecvTextDispBuf, pRecvDataAddr);

    //受信データのラベル・コントロール Text表示
    frmCom->recvTextDisp(); //← ここから@の★funcPub1()関数が
         //呼ばれるが、lblData->Text値が変わっていない!
    }

Blue 2006/05/15(月) 15:34:26
> FormComData 
ってなに?

> extern g_szTextBuf[];
これって?型すらないけど。



それと、丸付き数字は機種依存文字です。
どのような機種で参照されるかわからないWeb上の掲示板では使用しないでください。

とるまリンゴ 2006/05/15(月) 16:41:54
> > FormComData 
> ってなに?
FormTest(フォームクラス)、

> > extern g_szTextBuf[];
> これって?型すらないけど。
extern char g_szTextBuf[]; です。

※UPミスです。

<例:LabelコントロールTextプロパティ書換>

  1.Form1.h  <-- Windowsフォームヘッダ

    //ラベルコントロール lblData->Textプロパティ値をグローバル変数
    //文字列で書き換えるpublic関数 funcPub1()用意

    extern char g_szTextBuf[];

    useing namespace Test;

    public ref class FormTest : public System::Windows::Forms::Form
    {
        public: Void funcPub1(void) <-- ★
        {
           String^ s = gcnew String( g_szTextBuf );
           lblData->Text = s;
        }
    }

  2.fromDisp2.cpp
    // ここの関数から

    char m_strRecvTextDispBuf[256];

    void Func2(void)
    {
       using namespace    Test;
 
        FormTest  ^ frmCom = gcnew FormTest;
      strcpy(m_strRecvTextDispBuf, pRecvDataAddr);

      //受信データのラベル・コントロール Text表示
      frmCom->recvTextDisp(); //← ここから@の★funcPub1()関数が
                    //呼ばれるが、lblData->Text値が変わって
                //いない!
    }

Blue 2006/05/15(月) 16:45:55
> g_szTextBuf 
はいつどんな情報が設定されるのでしょうか?

単に
> strRecvTextDispBuf
を表示したいのならば、メソッドに1つ引数を増やして渡すというのが普通なんです
が。

とるまリンゴ 2006/05/15(月) 17:32:06
 Blueさん
   こちらの誤記、読みにくい表現等々で、
   重箱の隅を突付くような指摘をさせてしまい失礼しました。

 ※数渡しか、グローバル変数渡しかといった事を質問したいのではない
   ので、追加情報を上げます。

<実現させたいこと>
 表示させたいのは、フォームとは別ファイルのFunc2()で決定した
 半角ASCII文字列(例えば "ABCDEF"や"1234")を、ラベルコントロールの
 Textプロパティに反映させたいのです。

 --> そこで、Func2()で決定した文字列を、ラベルTextプロパティにセット
     するFormクラス(FormTest)のpublicメソッドを用意しました。

    (クラスの引数件はまだ理解できていないので、今回はグローバル変数で
      ご容赦下さい。)

 しかし、
   funcPub1()内lblData->Textをウオッチ式参照(ステップ実行にて)
   した時には、Func2()でセットした文字列と同じなのに
   Func2から抜けて、FormTestでthis->lblData->Textをウオッチ式
   参照したら変わっていない(元の文字列のまま)のです。

<例:LabelコントロールTextプロパティ書換>

  1.Form1.h  <-- Windowsフォームヘッダ

    //ラベルコントロール  lblData->Textプロパティ値をグローバル変数
    //文字列で書き換えるpublic関数 funcPub1()用意

    extern char g_szTextBuf[];

    useing namespace Test;

    public ref class FormTest : public System::Windows::Forms::Form
    {
        public: Void funcABC(void)
        {
       String^ s;
            this->lblData->Text = L"ABCD";
            Func2();
            s = this->lblData->Text; //<-- ※2.
                  //"1234"期待したが、元の"ABCD"のまま
        }

        public: Void funcPub1(void)
        {
           String^ s = gcnew String( g_szTextBuf );
           lblData->Text = s;    <--※1.ここで"1234"セットされても
        }
    }

  2.fromDisp2.cpp

    char g_szTextBuf[256];

    void Func2(void)
    {
        using namespace    Test;
 
        FormTest  ^ frmCom = gcnew FormTest;
        strcpy(g_szTextBuf, "1234");

       //受信データのラベル・コントロール Text表示
       frmCom->funcPub1(); //FormTestのpublicメソッド・コール
    }
  

Blue 2006/05/15(月) 17:41:12
参照しているFormTestが違います。

FormTest  ^ frmCom = gcnew FormTest;
の frmCom と Func2 はべつのインスタンスです。
(試しに
> frmCom->funcPub1(); //FormTestのpublicメソッド・コール
の下に
frmCom->Show();
とでも入れると、もう一つダイアログが出てくると思いますよ。)


Func2の引数に 変更したいFormTestつまりthisを指定するようにして、
その引数に対して funcPub1() を読んでみてはどうでしょうか?

Blue 2006/05/15(月) 17:41:55
訂正
> の frmCom と Func2 はべつのインスタンスです。
の frmCom と Func2 を呼び出している FormTest は別のインスタンスです。

古いスレッドには追加発言できません。