- PR -

VB2005 クラス内の関数呼び出しについて

1
投稿者投稿内容
武装キョンシー
ベテラン
会議室デビュー日: 2006/04/07
投稿数: 57
投稿日時: 2006-10-15 19:59
ぽんと申します。
以前、VB6を使っていましたがVB2005の勉強をするにあたりオブジェクト指向(クラス)の扱いに困っています。
form.vbとクラス.vbの2つファイルをつくりformには
public Class form
private sub btn_click(Byval sender as system.object,Byval e as system.eventargs)handles btn.click]
msgbox("よろしいですか?",vbokonly) 
end sub
end class
があり、
クラス.vbは
public class クラス
'テキストボックスの中身をチェックする関数
  public function txt_check()
'内容は省略
  end function
end class

があります。

form.vbのmsgboxの後にクラス.vbのtxt_checkという関数を呼び出すにはどのようにしたらよろしいのでしょうか?また関数がprivateのときの方法もご教授お願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-10-15 20:24
そのままだったら
コード:

Private Sub btn_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn.click
	MsgBox("よろしいですか?", vbOKOnly)
	Dim c As クラス
	c.txt_check()
End Sub


このようにインスタンス化して呼び出します。

インスタンス化しないで呼び出すには、
コード:

Public Class クラス
	'テキストボックスの中身をチェックする関数 
	Public Shared Sub txt_check()
		'内容は省略 
	End Sub
End Class


と定義し、
コード:

Private Sub btn_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn.click
	MsgBox("よろしいですか?", vbOKOnly)
	クラス.txt_check()
End Sub


このように呼び出します。

_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-15 21:16
引用:

武装キョンシーさんの書き込み (2006-10-15 19:59) より:

form.vbのmsgboxの後にクラス.vbのtxt_checkという関数を呼び出すにはどのようにしたらよろしいのでしょうか?


クラスの場合は、関数ではなくメソッドと言います。
囚人さんの回答どおりで、静的メンバ (VB では共有メンバ) にすれば良いと思います。

コード:

    Public Class 検証クラス

        Public Shared Function IsValidNantara(ByVal text As String) As Boolean
            ' エラーでなければ True を返す
            If text <> "" Then
                Return True
            End If
        End Function

    End Class


上記のように、チェック内容は引数で受け取り、結果は戻り値で返すような作りが望ましいです。
そうすれば、

コード:

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' 登録の確認を促すアラート ダイアログ
        If MessageBox.Show("登録しますが、よろしいですか?", "確認", MessageBoxButtons.YesNo) <> DialogResult.Yes Then
            MessageBox.Show("実行を取りやめました")
            Return 'このプロシージャを抜ける
        End If

        ' エラー検証を行う
        If Not 検証クラス.IsValidNantara(Me.txtNantara.Text) Then
            ' エラーだった場合
            MessageBox.Show("Nantara の入力が不正です")
            Me.txtNantara.Focus()
            Return 'このプロシージャを抜ける
        End If

        ' 別のエラー検証を行う
        If Not 検証クラス.IsValidKantara(Me.txtKantara.Text) Then
            ' エラーだった場合
            MessageBox.Show("Kantara の入力が不正です")
            Me.txtKantara.Focus()
            Return 'このプロシージャを抜ける
        End If

        ' エラー検証がすべて問題なかった場合に行いたい処理をここに書く
        Me.NanikawoExecute()
    End Sub


このように、'エラーだったかどうか' を呼び出し元が関知できます。
最終的に行いたい処理まで、ガード句を使ってエラー検証をするとわかりやすいです。

引用:

また関数がprivateのときの方法もご教授お願いします。


リフレクションを使えば、Private なメンバであっても呼び出すことができます。(過去ログを参照)
しかし、Private は敢えて隠蔽しているものですから、呼び出さないのがルールでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-16 07:31
friendとpublicを使い分けると吉
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-10-16 09:00
引用:

武装キョンシーさんの書き込み (2006-10-15 19:59) より:

以前、VB6を使っていましたがVB2005の勉強をするにあたりオブジェクト指向(クラス)の扱いに困っています。


ご質問内容に関する点だけで言うと、VB6 でも全く同じことができます。

つまり、既に実践しているVB6においても、オブジェクト指向を取り入れたプログラミングが可能です(完全にとは言えませんが)

こちらも合せて勉強されてみると効率よく習得できるのではないでしょうか。
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
武装キョンシー
ベテラン
会議室デビュー日: 2006/04/07
投稿数: 57
投稿日時: 2006-10-16 23:55
インスタンス化でできそうです。勉強させていただきました。
でも、囚人のアドバイスからちょっと考えさせていただきましたが

コード:

Private Sub btn_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn.click
MsgBox("よろしいですか?", vbOKOnly)
Dim c As クラス
c.txt_check()
End Sub

このようにした場合、cはNullexceptionが起こるのではないでしょうか?
c = New クラス()
を追加したほうがいいのでしょうか?



囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-10-17 00:19
引用:

このようにした場合、cはNullexceptionが起こるのではないでしょうか?
c = New クラス()
を追加したほうがいいのでしょうか?


あ、ごめんなさい。普通に間違えました。
New を追加したほうがよいです。
_________________
囚人のジレンマな日々
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-10-17 01:06
したほうがいいじゃなくてしなくちゃだめ。
つーかエラーチェックなんてインスタンスに依存しないんならSharedにすべきだと思うんだが。

って既にでてるが・・・・・・・・・

[ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2006-10-17 01:07 ]
1

スキルアップ/キャリアアップ(JOB@IT)