何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 3835
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

はじめにことわっておきます。解決のためのコードやロジックはありません。サンプルが欲しい人はこっち

 

いろんな掲示板で、様々な状況の、「複数のフォーム間で、データをやりとりする方法」について、質問が上がっています。

ごめん。なぜわからないのか、わからない。。。

例えば、こんな質問。


class Form1 : Form {
    // 略
    private void button1_Clicked(...) {
        Form2 frm2 = new From2();
        frm2.Show();
        this.Hide();
    }
    // 略
}
class Form2 : Form {
    // 略
    private void button1_Clicked(...) {
        this.Close();
        // ここで Form1 を表示したい!!
        // ここで Form1 に textBox1 の内容を渡したい!!
    }
    // 略
}

じゃんぬさんのエントリ、「VB6.0 で Form の「既定のインスタンス」(暗黙のインスタンス化) を防ぐには?」を読んでいると、VB6.0 ユーザだと、こうしたいのかな?


class Form1 : Form {
    // 略
    private void button1_Clicked(...) {
        Form2.Show();
        this.Hide();
    }
    // 略
}
class Form2 : Form {
    // 略
    private void button1_Clicked(...) {
        this.Close();
        // ここで Form1 を表示したい!!
        Form1.Show();
        // ここで Form1 に textBox1 の内容を渡したい!!
        Form1.textBox1.Text = this.textBox1.Text;
    }
    // 略
}

で、規定のインスタンスがないので、Form1. と入力したところで、インテリセンスが反応しない。無理矢理入れてもコンパイル エラーになる。。。ってこと?

これだったら、なるほど。「クラスやインスタンスの概念を理解しましょう」ってことになりますね。

じゃぁ、アレですね。VB2005 では、規定のインスタンスが復活したので、こういう書き方が出来ちゃうわけですね(ここに書いているのは C# だろ、というツッコミは勘弁)。

じゃぁ、なんですかね?「MDI のように複数表示したいのだけど、出来ない」って質問が出てくるのか、今度は?

投稿日時 : 2006年11月21日 23:39
コメント
  • # re: 複数のフォーム間で、データをやりとりする
    じゃんぬ
    Posted @ 2006/11/21 23:42
    > じゃぁ、なんですかね?「MDI のように複数表示したいのだけど、出来ない」って質問が出てくるのか、今度は?

    まさか!!
    インスタンスを意識できてもいないので、複数表示できないものだと納得して終了ですよ!!
    えらい人にはそれがわからんのですよ。
  • # re: 複数のフォーム間で、データをやりとりする
    Jitta
    Posted @ 2006/11/21 23:43
    はや!!!(^-^;
  • # re: 複数のフォーム間で、データをやりとりする
    がる
    Posted @ 2006/11/22 19:38
    MSしらない人間の極めて素朴な質問でふ。

    // ここで Form1 を表示したい!!
    Form f1 = new Form1;
    f1.なんか色々設定();
    f1.show();

    // ここで Form1 に textBox1 の内容を渡したい!!
    f1.set_value(どこか) = this.textBox1のインスタンス.get_value();

    こーゆーイメージでは駄目なんでせうか?
    ストレートに「ほぼ全然知らん」状態でカンだけで書いてます(笑
  • # re: 複数のフォーム間で、データをやりとりする
    がる
    Posted @ 2006/11/22 19:40
    …あ間違えた。

    f1.set_value(どこか入れる場所, this.textBox1のインスタンス.get_value() );

    です(苦笑

    或いは…
    Object setobj = f1.get_instance(入れる場所);
    setobj->set_value(this.textBox1のインスタンス.get_value() );
    のほうが適切なのかな?
    # 矢印演算子なのは「参照のつもり~」程度のニュアンスです。
  • # re: 複数のフォーム間で、データをやりとりする
    Jitta
    Posted @ 2006/11/22 21:55
    あ。。。。。

    いや、がるさん、ここに注目してください。

    > VB6.0 ユーザだと、こうしたいのかな?
    > 規定のインスタンスがないので、コンパイル エラーになる
    > クラスやインスタンスの概念を理解しましょう

    詳細は、今から登録する予定のエントリを見てから、お願い。
  • # re: 複数のフォーム間で、データをやりとりする
    Jitta
    Posted @ 2006/11/24 21:59
    あ、ちげ~。

    > // ここで Form1 を表示したい!!
    > Form f1 = new Form1;
    > f1.なんか色々設定();
    > f1.show();
    違います、違います。
    ここで表示したい Form1 は、Form2 を表示したインスタンスです。
    このコードだと、新しい Form1 が開いてしまいます。んで。それって、VB6.0 からの移行組が陥る罠(^-^;

    つまり。インスタンスとクラスの関係、class で宣言したものと new で作られるものの関係が理解できていないので、Form2 のインスタンスから、それを開いた Form1 のインスタンスを操作できず、「子から親を開きたい」という質問になるんですねぇ。

    VB6.0 以前であれば、クラス名と同じ変数が、「規定のインスタンス」として作成されるため、Form2 のインスタンスから Form1.Set~ としても、Form2 を開いた Form1 のインスタンスにアクセスできます。つまり、「クラスとインスタンスの関係を理解していなくても、それなりのアプリケーションを作れてしまう」と。

    それに対して、VB.NET2002 では、規定のインスタンスが無くなったので、VB6.0 以前のような作り方は出来ず、その為にクラスとインスタンスの関係を理解ぜざるをえなくなった。

    なのに、VB2005 で規定のインスタンスが復活した。しかし、VB6.0 の頃と違い、「汎用機と同じオペレーション」を求める機会も減っている。汎用機と同じオペレーションなら、1アプリケーション1インスタンスで十分だけど、Windows などの標準的なアプリケーション仕様に従うと、1アプリケーション多インスタンスが必要になる。

    そこで。「複数の子を開きたいけど、出来ません」という質問が、増えてくるのかなぁ?と。

    これは、VB6.0er であったり、C-Global Coder であったりするから陥る罠で、オブジェクト指向の基本を理解できていれば、難なくクリアできる問題だと思います。
  • # re: 複数のフォーム間で、データをやりとりする
    がる
    Posted @ 2006/11/26 2:57
    > 違います、違います。
    > ここで表示したい Form1 は、Form2 を表示したインスタンスです。
    > このコードだと、新しい Form1 が開いてしまいます。んで。それって、VB6.0 からの移行組が陥る罠(^-^;
    ぬぁんと!!
    いやまぁ「新しい Form1 インスタンス」ってのを意識してはいたのですが。
    ………あ、そうか。「Formってなに?」からスタートせにゃならんなんだ。

    某所より
    form フォーム(メインウィンドウ、子ウィンドウ、ダイアログ)

    ああ!
    つまり「X Window ハンドル」なんだ(わかんねぇって)。
    1Formインスタンスは、明示的な1つのWindowをあらわしてるのですね?

    > つまり。インスタンスとクラスの関係、class で宣言したものと new で作られるものの関係が理解できていないので、Form2 のインスタンスから、それを開いた Form1 のインスタンスを操作できず、「子から親を開きたい」という質問になるんですねぇ。
    なるほろ。………恐ろしい質問ですなぁ。
    っつか。

    > VB6.0 以前であれば、クラス名と同じ変数が、「規定のインスタンス」として作成されるため
    って仕様が激しくも果てしなくどこまでも「だめぽ」な感じなのですが。
    とりあえず…設計者に意図を「丁重に」うかがってみたいものですな。

    > これは、VB6.0er であったり、C-Global Coder であったりするから陥る罠で、オブジェクト指向の基本を理解できていれば、難なくクリアできる問題だと思います。
    っつか…真っ当にプログラミングしてて「自動に」とかって怪しい挙動がなければ、後は「データの流れの管理」で概ね片付きそうな。

    しかしまぁ…思うのですが。
    「誰でも簡単に」なんて言語(経験に基づく個人的偏見:VB、PHP、Perl)しかやってない方々のスキルは…正直なところ、危ぶむことすらありません。
    せめて。せめてC言語はたしなみじゃなかろうかと思うんですがねぇ。特にメモリ管理とポインタは。
    その後でOOPも必須になりますが。
    ちなみに、最近うちの周りにあります「寺子屋○○(○○には私の本名苗字が入っております(苦笑))」では、最近「マシン語(正確にはニーモニック)」を「必須履修項目」にしました。大切な基礎が学べるので。

    プログラマって名乗りたいのなら、是非ちゃんと学んでいただきたいものです。
  • # re: 複数のフォーム間で、データをやりとりする
    Jitta
    Posted @ 2006/11/26 21:58
    > つまり「X Window ハンドル」なんだ(わかんねぇって)。
    ですです(こっちか!)

    > とりあえず…設計者に意図を「丁重に」うかがってみたいものですな。
    いえいえ、VB は、これで良いのです。VB の販売対象は、元々、開発者ではないのですから。
    ここを、切り替えて見る必要があると思うのです。
    大工が仕事を行う。
    一般人が、日曜大工を行う。
    同じ形の道具でも、材質や利用できる場所が異なります。
    私は、VB を開発者が使うのは、日曜大工道具を、大工が仕事で使うようなものだと思っています。
    日曜大工で犬小屋を造るのに、その辺で買ってきたノコギリやカンナを使う。これに「ノコギリの設計者に、設計意図を伺いたい」とは、思いませんよね。でも、大工が仕事で使うノコギリが、ホームセンターで売っているノコギリと同じ仕様なら、「設計意図を伺いたい」と思います。
  • # re: 複数のフォーム間で、データをやりとりする
    がる
    Posted @ 2006/11/27 11:24
    がるです。
    んっと………
    > VB の販売対象は、元々、開発者ではないのですから。
    あ、これ明言してよかったんだ(笑
    常々「あれはオモチャだよねぇ」とは思っていたのですが、まぁ色々とはばかる部分もあろうかと思って、なかなか口に出せなかったのですが(苦笑
    # 類似品 PHP。あれは「ぱぁそなる ほぉむぺぇぢ つぅるづ」です。業務に使っちゃぁいけません。

    そうするとやはり「お道具のチョイスミス」なんでしょうねぇ。
    ただそうすると…「業務でVBをやっている現状を憂う」べきか「業務でVBが用いられていることを鑑みてVBに大きくてこ入れをして業務に耐えられるようにするか」って論点になるのですね。

    さてはて。はたしてどちらがよりよく、あるいは現実的なのか………。
  • # re: 複数のフォーム間で、データをやりとりする
    Jitta
    Posted @ 2006/11/27 22:59
    > > VB の販売対象は、元々、開発者ではないのですから。
    > あ、これ明言してよかったんだ(笑
     むしろ、言及してください(笑)

    > そうするとやはり「お道具のチョイスミス」なんでしょうねぇ。
     私は、そう思います。
     ただ、このチョイスを、誰が行ったのか。それが問題。

    > VBに大きくてこ入れをして業務に耐えられるようにするか
     VB.NET2002 で、一応、業務に耐えられるようになったと思います。
     ただ、やはり、「開発者でないユーザ」の声には答えなければならないわけで(えっと、ここの開発者は、ちっと、違う意味も含んでいます)。その線引きをどこでするか。VB2005 では、再び、大きく「開発者でないユーザ」側に寄ったように思います。この路線を続けるなら、開発者は VB から他の言語に移行するべきか、と。
    (で、移行の敷居が高いのも、VB の特徴(--;)
  • # ルイヴィトンコピー
    llrdpwuj@hotmail.co.jp
    Posted @ 2017/10/31 1:00
    とっても素敵なお品が無事届きましたーっ! 大満足です。 ショップの対応も迅速・丁寧で大変信頼できました。 大切に使わせて頂きますねっ! 本当にありがとうございました。 また機会がございましたら、よろしくお願いします。
    ルイヴィトンコピー http://www.newkokoku.com
  • # ブランド 時計
    vzbphm@docomo.ne.jp
    Posted @ 2017/11/04 23:40
    迅速・丁寧に対応頂きお品物も素敵で満足しています。
    また機会がありましたらヨロシクお願い致します。
    ★ルイヴィトン★パドロック★カデナ&カギ×1★ゴールド★
    スーツケースのカギを失くしてしまったので、代替品として購入しました。
    写真では少し黒ずんでいましたが、実際はとてもきれいな状態でした。
    割安で購入できて、本当に助かりました。
  • # ルイ.ヴィトン財布コピー品
    xtutxqni@hotmail.co.jp
    Posted @ 2017/11/11 13:45
    娘が非常に喜んでいます。また本当に商品が本物で最近はメイドインチャイナが多い新品当にメイドインフランスで本人も大喜びでした。また宜しくお願いします。
    ★ルイヴィトン★モノグラム★ミニスピーディ★M41534★
    安い買い物でした。
    娘が非常に喜んでいます。また本当に商品が本物で最近はメイドインチャイナが多い中本当にメイドインフランスで本人も大喜びでした。また宜しくお願いします。
    ルイ.ヴィトン財布コピー品 http://www.kopi356.com
  • # ルイヴィトンコピー
    kdifogj@live.jp
    Posted @ 2017/11/13 17:51
    注文から発送開始までとても早く問題なく受け取りました。
    また本物証明書も同封されていたので安心です。
    またお願いします。【送料無料】コーチ ショルダーバッグをセール価格で販売中♪コーチ ショルダーバッグ シグネチャー ストライプ 41644 スウィングパック ベージュ ピンク キャンバス
    今回、初めての新品商品購入でした。最近新品でこのデザインが手に入りにくくなっている事からの新品商品購入でした。商品案内通りの状態でしたので価格的にも納...
タイトル  
名前  
Url
コメント