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

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

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

Re[6]: フォーム上のTextBoxのクリア処理を共通化したい。


(過去ログ 29 を表示中)

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

■13710 / inTopicNo.1)  フォーム上のTextBoxのクリア処理を共通化したい。
  
□投稿者/ ポンデC# (1回)-(2008/02/02(Sat) 12:02:22)

分類:[.NET 全般] 

こんにちわ、C#初心者です。
現在、Form1と言うform上に、TextBoxが5つ並んでいます。
そして、そのフォーム上には、TextBoxクリアと言うボタンがあります。
ボタンをクリックすると、TextBoxの内容をクリアします。

private void TextBoxクリア_Click(object sender, EventArgs e)
{
      this.txtbox1.Text = "";
      this.txtbox2.Text = "";
      this.txtbox3.Text = "";
      this.txtbox4.Text = "";
      this.txtbox5.Text = "";
}

この処理をフォームを開くとき、また別の処理をするときに使うので
共通化させたいのですが、
空のクラスを作り、呼び出して使うにはどのようにコーディングすればよいでしょうか?
下記のように記述してもうまく動作しません。・・・

---------------------------------------------------------------------------------

空のクラス
namespace テキスト処理
{
    class Form1 : System.Windows.Forms.Form
    {
        public void データクリア()
        {
            this.txtbox1.Text = "";
            this.txtbox2.Text = "";
            this.txtbox3.Text = "";
            this.txtbox4.Text = "";
            this.txtbox5.Text = "";
        }
    }
}

Form1.cs内のコード

namespace テキスト処理
{
    public partial class Form1 : Form
    {
        private void TextBoxクリア_Click(object sender, EventArgs e)
        {
            データクリア();
        }
    }
}

---------------------------------------------------------------------------------

ExcelのVBAなどでは、標準モジュールを追加して、

SUB データクリア()
    Form1.txtbox1.Text = ""
    Form1.txtbox2.Text = ""
    Form1.txtbox3.Text = ""
    Form1.txtbox4.Text = ""
    Form1.txtbox5.Text = ""
END SUB

で、Call データクリア をクリックイベントや他のイベントで呼び出せばよかったと思うのですが、
C#ではどのような呼び出しになるのでしょうか?



引用返信 編集キー/
■13711 / inTopicNo.2)  Re[1]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ れい (412回)-(2008/02/02(Sat) 12:14:15)
2008/02/02(Sat) 12:14:26 編集(投稿者)
No13710 (ポンデC# さん) に返信
> この処理をフォームを開くとき、また別の処理をするときに使うので
> 共通化させたいのですが、
> 空のクラスを作り、呼び出して使うにはどのようにコーディングすればよいでしょうか?
> 下記のように記述してもうまく動作しません。・・・

クラスとかモジュールの基礎がよくわかっていないようです。
一度サンプルをみればすぐわかるかと思います。

普通こういう場合には空のクラスもモジュールも使いません。
Form1を変更するのです。

こんな感じ。


> Form1.cs内のコード
> 
> namespace テキスト処理
> {
>     public partial class Form1 : Form
>     {
>         private void TextBoxクリア_Click(object sender, EventArgs e)
>         {
>             データクリア();
>         }
>         private void Form_Load(object sender, EventArgs e)
>         {
>             データクリア();
>         }
>         public void データクリア()
>         {
>             this.txtbox1.Text = "";
>             this.txtbox2.Text = "";
>             this.txtbox3.Text = "";
>             this.txtbox4.Text = "";
>             this.txtbox5.Text = "";
>         }
>     }
> }

引用返信 編集キー/
■13712 / inTopicNo.3)  Re[2]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ ポンデC# (2回)-(2008/02/02(Sat) 12:21:00)
No13711 (れい さん) に返信
> 2008/02/02(Sat) 12:14:26 編集(投稿者)
>
>
> 普通こういう場合には空のクラスもモジュールも使いません。
> Form1を変更するのです。
>
れいさんありがとうございます。
と言うことは、Form1と言うForm内の処理はすべてForm1.cs内のフィールドで
コーディングするということですか?
とてつもなく長くなる場合などはどうすればよいでしょう?
本などを見ると600行くらいに抑えましょうと書いてありましたが・・


引用返信 編集キー/
■13713 / inTopicNo.4)  Re[3]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ よねKEN (116回)-(2008/02/02(Sat) 13:27:12)
> と言うことは、Form1と言うForm内の処理はすべてForm1.cs内のフィールドで
> コーディングするということですか?

"Form内の処理"というのがForm自身やFormに配置されたコントロールのプロパティ、
メソッドを使う処理という意味でおっしゃっているならその通りです。

例えば、TextBox1、TextBox2、Button1が配置されているFormでButton1がクリックされたら、
TextBox1の値を使って何らかの計算をしてその結果をTextBox2に反映するものとしましょう。
この場合、Button1クリックイベントの中の処理は

TextBox1.Text = 何らかのクラス.何らかの処理(TextBox2.Text);

のようなイメージになります。何らかの処理自身は、計算処理なので別の適切なクラスに
実装されると思われますので、計算処理が100行に及んだとしてもFormのソースコード行数には影響しません。

> とてつもなく長くなる場合などはどうすればよいでしょう?

上記の意味での"Form内の処理"だけを記述してもとてつもなく長くなりますか?

> 本などを見ると600行くらいに抑えましょうと書いてありましたが・・

その本ではどういう基準で600行と書かれているのかわかりませんが、
個人的には1000行くらいまではOKかなと思っています。
1000行には明確な根拠があるわけではなく、自分がそのソースコードを把握する上で
把握しやすい分量の上限としてそういう目安を持っています。

個人またはチーム内で把握がしやすければ何行でもよいとは思います。


引用返信 編集キー/
■13714 / inTopicNo.5)  Re[3]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ やじゅ (85回)-(2008/02/02(Sat) 13:40:57)
やじゅ さんの Web サイト
No13712 (ポンデC# さん) に返信
> と言うことは、Form1と言うForm内の処理はすべてForm1.cs内のフィールドで
> コーディングするということですか?
> とてつもなく長くなる場合などはどうすればよいでしょう?
> 本などを見ると600行くらいに抑えましょうと書いてありましたが・・
>

作成する上で、Form1内のコントロールと関係ない処理などが出てくるので
場合により、別クラスに分けるなどすればいいでしょう。
Form1もクラスの1つです。
「クラス分割」などで検索するといいですよ。
引用返信 編集キー/
■13736 / inTopicNo.6)  Re[4]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ Hirotow (176回)-(2008/02/03(Sun) 23:14:39)
partialクラスにするとか、まとまりごとに#regionで括るとかするのも手です。
もうひとつ、ひとくくりの内部データ(モデル)を扱う処理はクラスに分離して、メンバ変数として保持すべきです。
引用返信 編集キー/
■13738 / inTopicNo.7)  Re[5]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ れい (414回)-(2008/02/04(Mon) 00:21:35)
No13712 (ポンデC# さん) に返信
> と言うことは、Form1と言うForm内の処理はすべてForm1.cs内のフィールドで
> コーディングするということですか?
> とてつもなく長くなる場合などはどうすればよいでしょう?
> 本などを見ると600行くらいに抑えましょうと書いてありましたが・・

基本的に、プログラムはきちんと動けばそれでいいのです。
どんなに汚くても。

ただ、汚いときちんと動くものを作るのに障害があるので、
目先の利益に走らずに、きちんと綺麗に書いたほうがいい、といわれているだけです。

なので、何が綺麗なのか、何行までがいいのか、
そういうのは個人の価値観・能力などに拠ります。

質問内容からして自分なりのコーディングスタイルを決定するにはまだ早いように見えます。
本に書かれている内容、掲示板での回答を参考にして、
実際にいろいろな手法でコーディングして自分なりのやり方を確立しましょう。

ちなみに、私は1000行でも10000行でも気にしません。
はるか昔、エディタで使えるファイルサイズに限界があったときには気にしていましたが。
引用返信 編集キー/
■13742 / inTopicNo.8)  Re[6]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ ポンデC# (3回)-(2008/02/04(Mon) 08:34:20)
おはようございます。
皆さん回答どうもありがとうございます。とても参考になりました。
自分なりの解りやすい処理の仕方を探し、頑張りたいと思います。
また何かありましたら宜しくお願い致します。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -