• ベストアンサー

長いソースをサブルーチンで分割

環境:VS.NET 2003 言語:VB.NET 1フォームにたくさんボタンを置いて、その機能を コーディングしていると、どうしてもそのフォーム、From1.vbの 行数が増えてしまって、見にくくなってくるのですが、 一部を別vbモジュール(?)に分割することは可能なのでしょうか? 別モジュールに書くと、Me.Button1等ができなくなりますが、 引き継ぐ方法ももしありましたらご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

フォームの一部を分割出来るなら,コントロール化するという方法もあります。 コントロールの外からコントロールの中へアクセスはできませんが, 上手いことプロパティやイベントを使って分割出来るなら, ユーザーコントロールは一つの解だと思いますよ。

ALEX1005
質問者

補足

ありがとうございました。 いまはちょっとハードルが高そうです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#221368
noname#221368
回答No.4

 最初に意見を述べさせて下さい。  Formの内容が多くなると鬱陶しいのはわかりますが、個人的にはコードの明快さを優先して我慢します。Controlが10個あれば、最低10個のEventプロシージャがある事を覚悟します。Event処理自体はSubroutine化して、別のClassかModuleに移す事はやりますが、Eventプロシージャ領域をFormから追い出す事は、ふつうしません。  次のコードを試してみて下さい。FormはForm1,自前のClassであるSub_Routine1,Sub_Routine2を用意します。Formには、TextBox1があります。Form1とSub_Routine1,Sub_Routine2のコードのTextBox1とText1を見比べて頂ければ、何が起こっているか、わかると思います。 Public Class Form1  Private Subroutine1 As Sub_Routine1  Private Subroutine2 As Sub_Routine2 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  Subroutine1 = New Sub_Routine1  Subroutine2 = New Sub_Routine2  AddHandler TextBox1.TextChanged, AddressOf Subroutine1.Text1_Change '必要Control分追加する End Sub End Class Public Class Sub_Routine1 Public Sub Text1_Change(ByVal sender As System.Object, ByVal e As System.EventArgs)  Stop End Sub End Class Public Class Sub_Routine2  Private WithEvents Target As TextBox = Form1.TextBox1 '本当は、Property化するか、Newに含めた方が安全 Private Sub Target_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Target.TextChanged  Stop End Sub End Class

全文を見る
すると、全ての回答が全文表示されます。
  • NYOI
  • ベストアンサー率58% (56/96)
回答No.2

2005以降であればPartialの出番ですが、2003ということで、うーん。 #Region~#End Regionで機能毎にブロックを分けるなどすれば、多少は見やすくなるかもしれません。

ALEX1005
質問者

お礼

ありがとうございました。

ALEX1005
質問者

補足

今は、Regionでしのごうと思います。 来年は、2008で、、 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

Class Form1 内なら SubモジュールやFunctionモジュールをいくつかいてもMe.Button1が使用できます。

ALEX1005
質問者

補足

すみません、それは新規作成して、別のClass.vbに 記述できることを意味するのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VS2010 VB.Netのコンソールアプリについ

    VS2010 Exspress VB.Netのコンソールアプリケーションについて VB.Netのコンソールアプリケーションにて、 実行すると黒い画面が表示します、これを止めるにはどうすれば、良いのでしょうか? ※VB6では、標準EXEより、フォームを無くし、標準モジュールを追加しても黒い画面は、表示されません よろしくお願いします

  • VBの実行時の処理の流れ(仕組み)について教えて下さい

    WindowsXp-Pro上でVB.NET2003を使用しています。VB.NET初心者です。 VB.NETはコーディング後デバッグを行いエラーがなければ実行される訳ですが、実行時の処理の流れと言うか、仕組みについてご伝授頂きたいと思います。 VB.NETにおいてはオブジェクト指向が進んでおりコーディング作業時は全体の流れを考えなくても、クラス内でのインスタンスやサブルーチン・関数ルーチン、フォームロード時の処理、モジュール内での処理等のコーディングのみを考えていれば実行できるようになっています(少なくとも今まで私が作成したプログラムはそうでした)。しかし、色々なサンプルプログラムを作っているとこれはクラスで指定した方が良い処理とかモジュールで指定した方が良いのではと思うことが多々あります。 プロジェクトやフォーム、クラス、モジュール、コンポーネントクラス、ユーザーコントロール、データフォームウィザード、継承コントロール (これらはVisualStudioの「プロジェクト」メニューをクリックした時の項目です) 等の処理の順序が判っていればもっと効率的な処理を適材適所に配置できるのではないかと思います。 これらをコーディングレベルで結構ですので機械内での処理の順序をご説明頂ければ幸いに思います。現在のところコンピュータは並列処理はできないので必ず優先順位がつくと思うのですが、未熟な為VBの全体像がつかめず処理の流れも判らずにいます。 よろしくお願い致します。

  • VB6.0 VB.NET2003とのクラスの違い

    こんにちは VB6.0でデータベースのソフトを作成しています。 当初VB6.0はVB.NETと違い完全なオブジェクト指向言語ではないと聞いていたので、 フォームの画面ごとに検索、追加、更新、削除、入力チェック,印刷のコードを書いていこうとしました。 しかし、最近そうでもないことがわかりました。 そこで、画面ごとではなく機能ごとに検索、追加、更新、削除、入力チェック,印刷のクラスモジュールをつくり、 どこに何が書かれているかわかるようにコーディングしたいと思います。 VB.NET2003は学生のころやっていたのですが、VB6.0は最近やりだしたのでよくわかっていません。 VB6.0の入門書をみてもクラスについては2~3ページしか触れていません。 VB.NET2003にはできるがVB6.0にはできないクラスの大きな違いを教えてください。 いまのところコンストラクターとオーバーロードはできないということだけわかっています。

  • モジュールのShowDialogで呼出したフォーム上で実行。さらにMe

    モジュールのShowDialogで呼出したフォーム上で実行。さらにMe.Disposeを実行 (vb.net2003)。 当サイトは何度か利用させて頂いて感謝をしております。上記についてですが呼び出されたフォームは確かに消えるようになりました。が、モジュールに戻った時点でメッセージが出てモジュールが終了しません。原因は「既にフォームが消された」情報がモジュールに伝わっていないので ShowDialog が終わらずメッセージを出したと思われます。モジュール側で、Try***Finally***等の対策コードをつくる必要があると思われますが全くのおてあげです。よろしくご教授をお願いいたします。

  • モジュール内の静的関数からフォームの名前を取得することは可能でしょうか?

    VB2008で、ListBox上にプログラムに含まれるフォームの名前の一覧を表示させたいのですが、モジュールに静的関数で呼び出す作りで(クラス内だとMeが使えますが、モジュールだとMeが使えないので難しいかな?) お願いします。

  • ASP.NETでの"ME"の受け渡し

    ご観覧ありがとうございます。 当方ですが、ASP.NET初心者になります。 乱文や意味不明な箇所などありましたらお詫び申し上げます。 言語:ASP.NET VB (VWD 2008) 環境:Windows XP 質問ですが、VB6でファンクションにMEで自分自身のフォームをユーザー関数などに渡す場合、 以下の「例:VB6」の様にクラスやモジュールに渡せたかと思います。 ASP.NETの場合ですと、フォームでなくPageになるかと思い、System.Web.UI.Pageにして同様に記述(「今回作成」参照)したところ、「'System.Web.UI.Page'のメンバではありません。」となり、エラーになってしましました。 同様にObject型も試しましたが、エラーになってしまいました。 このようなことは出来ない Or やらない方が良いのでしょうか? 色々調べましたが、良い方法が見つかりませんでした。 実現可能な方法、代替案、お勧めなどありましたら教えて頂ければ幸いです。 よろしくお願い致します。 追伸 今回のMEをユーザ関数に渡すのは、各ページのイベントに長いコードの記述をさけるのを目的にしています。 例:VB6 ↓↓↓↓↓フォームの処理↓↓↓↓↓↓ Private Sub Button1_Click() TestKansu(Me) End Sub ↓↓↓↓↓モジュール↓↓↓↓↓↓ Private Sub TestKansu(ByRef MyForm as Form) With MyForm .label1.Caption = "AAAA" .label2.Caption = "BBBB" End With End Sub 今回作成 ↓↓↓↓↓Pageの処理↓↓↓↓↓↓ Private Sub Button1_Click() Dim TestClass as new clsTest TestClass.TestKansu(Me) End Sub ↓↓↓↓↓CLASS (clsTest)↓↓↓↓↓↓ Public Sub TestKansu(ByRef MyPage As System.Web.UI.Page) With MyPage .label1.Caption = "AAAA" .label2.Caption = "BBBB" End With End Sub

  • [VB6] フォームを閉じる方法について

    お世話になります。 VB6で別フォームを起動する際の親フォームの閉じ方について 質問させてください。 呼び出し元フォームからShowメソッドで別フォームを起動すると、 呼び出し先のフォームでマウスのカーソルが砂時計表示になってしまいます。 (呼び出し元のフォームはUnload Meで閉じています。) [Form1の処理] Private Sub Button1_Click() Form2.Show Unload Me End Sub ※Form1は呼び出し元。Form2は呼び出し先。 原因について、どなたかご存知の方がいらっしゃいましたら、 ご教授願えますか?

  • tagの値

    ボタン1を押すと変数に1を ボタン2を押すと変数に2を・・・ という具合にしたいのですが、いろいろしてみましたが、分かりません。分かる方教えてくだい。 (tagには値を入れてあります。) Button1_Click、Button2.Click~ Label1.Text = Tag や Button1_Click、Button2.Click~ Label1.Text = Me.Tag だと、なぜかフォームのtagの値が入ってしまいます。 Button1_Click~ Label1.Text = Button1.Tag Button2.Click~ Label1.Text = Button2.Tag だとソースが長くなってしまいます。 ちなみにVB.NETです。

  • VB.NETのフォームに別のウインドウ型プログラムを組み込む方法

    VB.NETのフォームの一部に、別プログラムを組み込む方法を探しています。 例えば、HTMLにIFRAMEで別のhtmlを表示するように、VB.NETのフォームにexcelやワードの画面を表示させる感じです。 類似の方法をご存知の方がいらっしゃれば、ご教授願います。

  • 日本語(コメントを除く)を抽出してEXCELファイルに羅列させる。

    VBの質問です。 標準EXEの中にあるフォームと標準モジュールの中の コードから日本語を(コメントを除く)抽出してEXCELファイルに 羅列させていくんですけど...。その場合 標準モジュールフォルダの中に任意で一つSampleモジュールなりなんなりをつくりコーディングしていくんでしょうか??それとコードから抽出した日本語をExcelファイルに羅列させていく場合どんな感じにすればいいでしょうか??VBは組んだことがなくて.... どなたかアドバイスよろしくお願いします。