質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

2776閲覧

コードビハインドで画面コントロールをオブジェクト変数化について

yougo0411

総合スコア12

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/03/29 15:32

編集2016/03/29 16:32

現在の現場で、WindowsフォームをVB.NETで実装しております。

同僚の新規画面の実装方法ですが、
画面のテキストボックスやチェックボックス等の全ての入力コントロールを、
イベント宣言されたインスタンス変数、またはコントロール配列の変数で保持しており、
各イベントはそのクラス変数に紐づいたイベントハンドラーをキックして処理します。
処理や条件によりイベントハンドラーを付け替え、解除は行っていません。
(複雑な制御の必要のない画面の為)


(例:細かい部分が間違っていたらすいません)
Private WithEvents obj名前 as TextBox = txt名前
Private WithEvents obj年齢 as TextBox = txt年齢
Private obj年代 as CheckBox() = New CheckBox(10)
...

Public Sub New()
Dim i As Integer
For i = 0 To 9
AddHandler obj年代(i).KeyPress, AddressOf test_CheckedChanged
Next
End Sub

Public Sub test_CheckedChanged(ByVal Object sender, ByVal EventArgs e)
...
End Sub

Public Sub obj名前_LostFocus(ByVal Object sender, ByVal EventArgs e) Handles obj名前.LostFocus(
...
End Sub


私の認識でコントロールをクラス変数で保持しておくのは以下のメリット(場合)だと考えていました。
・VB6時代にコントロール配列があって、同グループのチェックボックスをループ処理などで纏めて処理する為の管理
・同一イベントハンドラーを複数コントロールに紐づけて処理させる為にコントロールをオブジェクト化
・イベントハンドラーの動的な紐づけ

そこで質問させていただきたいのですが、
▼1.全ての入力コントロールをクラス宣言してイベント発生させるのに意味が見出せませんが、
少なくても「共通イベントを持たない かつ チェックボックスやラジオボタン以外」も
積極的にクラス変数化するのは、どのようなメリットがあるのでしょうか。
(イベントの追加・解除が必要な画面でならばHandlesのよるイベントハンドラーは解決できない場合もあり!?)

▼2.C#でもコントロールのオブジェクト変数化は普通に行われている技術でしょうか。

▼3..Netの新画面にコントロール配列に違和感を感じるのは私だけでしょうか。

色々な現場、実装方法を知りたいので様々な意見頂戴できると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。


▼1.全ての入力コントロールをクラス宣言してイベント発生させるのに意味が見出せませんが、
少なくても共通イベントを持たない かつ チェックボックスやラジオボタン以外も積極的に
クラス変数化するのは、どのようなメリットがあるのでしょうか。

そのコントロールをどこで作成しているかによります。デザイナー(xxx.Designer.vb)側で生成されているのであればそちらへ宣言済みです。今回のケースではコードビハインド?(xxx.vb)側でコントロールの生成を行っているのではないでしょうか。
VB.NETではイベントハンドラでHandles句を使用する場合はWithEvents宣言が必要です。
また上記の方法で生成されたコントロールをクラス内で自由にアクセスするためには宣言が必要です。


▼2.C#でもコントロールのオブジェクト変数化は普通に行われている技術でしょうか。

もはやC#とVB.NETは概念に大きな違いはありません。C#でも通常の考えです。
ただ、C#ではWithEventsもHandlesも存在しないので、obj年代のように自前でイベント購読させる必要はあります。


▼3..Netの新画面にコントロール配列に違和感を感じるのは私だけでしょうか。

良し悪しはケースバイケースですが…
同一グループのCheckboxの数が可変であれば、アリかなと個人的に思います。

投稿2016/03/29 16:07

編集2016/03/29 16:08
Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問