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

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

C# と VB.NET の入門サイト

Re[2]: visual C#での複数のフォームで同じ処理をする方法


(過去ログ 109 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■64986 / inTopicNo.1)  visual C#での複数のフォームで同じ処理をする方法
  
□投稿者/ いちば (6回)-(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()がうまく呼び出せないためうまくいきません。
このような場合どのような処理を行うのでしょうか?

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

親子関係を明確にし一番上の親となるフォーム上に書くのが自然かと思います。
親のインスタンスが参照できるよう各フォームにインスタンスを参照するための情報を持つか
イベントを起こして親フォームで取得出来るようにするとよいと思います。
親子関係がなくすべて平等であればクラスを1つ作成しそのクラスに処理させるようにするとよいかと思います。

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

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

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


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

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


 なお、「C での関数のような」というのは、的外れです。C# では「メソッド」と言いますが、これは C の関数と変わりありません。C と何が違うかというと、参照できる範囲です。C の関数は、static 宣言していなければ、どこからでも参照できます。static 宣言しても、そのファイル内であれば、どこからも参照できます。C# では、クラス、アクセス修飾子、static 修飾子によって、参照できる範囲、時が限られているのです。よって、これらの組み合わせによっては、C での宣言のように、いつでもどこからでも参照できるようになります。

引用返信 編集キー/
■65075 / inTopicNo.4)  Re[2]: visual C#での複数のフォームで同じ処理をする方法
□投稿者/ じゅうべい (10回)-(2013/02/01(Fri) 13:11:34)
shuさんJittaさん回答ありがとうございます。
親フォームにひとまとめにすることにしました。
オブジェクト志向の考え方をもっと勉強しようと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -