C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.64986 の関連記事表示

<< 0 >>
■64986  visual C#での複数のフォームで同じ処理をする方法
□投稿者/ いちば -(2013/01/28(Mon) 16:10:47)

    分類:[C#] 

    2013/01/28(Mon) 16:16:59 編集(投稿者)
    2013/01/28(Mon) 16:16:53 編集(投稿者)

    visual C# を用いて複数のformを操作しています

    //Form1
    namespace Form1 {
    public partial class Form1 : Form {
    private void button1_Click(object sender, EventArgs e) {
    string str = "abcdefg";
    form1_textBox1.Text = str;
    }
    }
    }

    //form2
    namespace Form2 {
    public partial class Form2 : Form {
    private void button1_Click(object sender, EventArgs e) {
    string str = "abcdefg";
    form2_textBox1.Text = str;
    }
    }
    }

    //form3
    namespace Form3 {
    public partial class Form3 : Form {
    private void button1_Click(object sender, EventArgs e) {
    string str = "abcdefg";
    form3_textBox1.Text = str;
    }
    }
    }

    という風に複数のフォームでstrに文字を入れてテキストボックスに表示という同じ処理を行っています。
    この時Cでの関数のような、string str = "abcdefg";の部分をひとまとめにして呼び出すという方法を取りたいのですがどうしたらいいでしょうか?

    現状はフォーム1に次のようにコードを書き

    FORM string form1_str = new FORM();

    class FORM {
    public string form1_str() {
    string str = "abcdefg";
    return (str);
    }
    }

    で呼び出しているのですが、form1に処理をすべて書くのはなんだか変な気がする。またForm2、Form3でform1_str()がうまく呼び出せないためうまくいきません。
    このような場合どのような処理を行うのでしょうか?
親記事 /過去ログ109より / 関連記事表示
削除チェック/

■64992  Re[1]: visual C#での複数のフォームで同じ処理をする方法
□投稿者/ shu -(2013/01/28(Mon) 17:27:26)
    No64986 (いちば さん) に返信

    親子関係を明確にし一番上の親となるフォーム上に書くのが自然かと思います。
    親のインスタンスが参照できるよう各フォームにインスタンスを参照するための情報を持つか
    イベントを起こして親フォームで取得出来るようにするとよいと思います。
    親子関係がなくすべて平等であればクラスを1つ作成しそのクラスに処理させるようにするとよいかと思います。
記事No.64986 のレス /過去ログ109より / 関連記事表示
削除チェック/

■65018  Re[1]: visual C#での複数のフォームで同じ処理をする方法
□投稿者/ Jitta -(2013/01/29(Tue) 21:48:54)
>
    No64986 (いちば さん) に返信
     C# はオブジェクト志向言語です。
     「この時Cでの関数のような、string str = "abcdefg";の部分をひとまとめにして呼び出すという方法を取りたいのですがどうしたらいいでしょうか?」という発想は、オブジェクトに志向(意志を向ける)しておらず、「str に既定の文字列を入れる」というプロセスに志向しています。

     なぜオブジェクト志向言語を使いながらプロセスに志向するのかという所を考えているのですが、ひとつの原因は Object Oriented の訳に「オブジェクト指向(方向を向く)=Object Directed」という言葉を使うからではないか、という事を考えました。つまり、指を向けていても考えはしていない、ということです。

     ということで、オブジェクトに指向(方向を向く)するだけではなく、志向(意志を向ける)しましょう。


     今、存在しているオブジェクトは「フォーム」と「ボタン」です。
    「ボタンを持ったフォーム」というオブジェクトを考えると、今のコードがそのまま解である、というのがひとつ。
    shuさんが書かれている様に、親フォームを用意してそこに集約できるコードを書く、というのがひとつ。
    「ボタン」を、「クリックされると指定されたテキストボックスに指定された文字列を放り込むボタン」と考えると、ボタンから派生して、テキストボックスと文字列をプロパティに追加したボタンを用意する、というのがひとつ。

     オブジェクトに志向するなら、この様な解決方法になるかと思います。


     なお、「C での関数のような」というのは、的外れです。C# では「メソッド」と言いますが、これは C の関数と変わりありません。C と何が違うかというと、参照できる範囲です。C の関数は、static 宣言していなければ、どこからでも参照できます。static 宣言しても、そのファイル内であれば、どこからも参照できます。C# では、クラス、アクセス修飾子、static 修飾子によって、参照できる範囲、時が限られているのです。よって、これらの組み合わせによっては、C での宣言のように、いつでもどこからでも参照できるようになります。
記事No.64986 のレス /過去ログ109より / 関連記事表示
削除チェック/

■65075  Re[2]: visual C#での複数のフォームで同じ処理をする方法
□投稿者/ じゅうべい -(2013/02/01(Fri) 13:11:34)
    shuさんJittaさん回答ありがとうございます。
    親フォームにひとまとめにすることにしました。
    オブジェクト志向の考え方をもっと勉強しようと思います。
記事No.64986 のレス / END /過去ログ109より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -