|
■No84296 (ruru さん) に返信 > クラスは Readerクラスが一つのみ存在します。
Reader クラスのインスタンスが一つしかない状態(Singleton など)を 連想しましたが、そういう意味では無いようですね。
> しかし、ReaderクラスのKansiメソッドに > Kansiイベント内に、 Kansi はメソッドなのでしょうか。イベントなのでしょうか。
> AForm.textbox = "監視データ" 上記は、 AForm.TextBox1.Text = "監視データ" の間違いでしょうか。
この場合デザイン時に、TextBox1 の Modifiers プロパティが Public, Friend, Protected Friend のいずれかになっている必要がありますね。 Modifiers が Private または Proteced だと使えません。
> (textboxも複数存在しますし、名前も不統一です)
===== 案1:コントロールを引数で渡す =====
'--- Reader クラス --- Public Class Reader Private config As String Private target As Control
Public Sub Load(config As String, target As Control) Me.config = config Me.target = target End Sub
Public Sub Kansi() If target IsNot Nothing Then target.Text = "監視データ" End If End Sub End Class
'--- AForm クラス --- reader1.Load("fuga", Me.TextBox1)
===== 案2:イベントで処理する =====
'--- Reader クラス --- Public Partial Class Reader Public Event Notice(caption As String) Public Sub Kansi() Dim data As String = "監視データ" RaiseEvent Notice(data) End Sub End Class
'--- AForm クラス --- Public Class AForm Private WithEvents reader1 As New Reader() Private Sub reader1_Notice(caption As String) Handles reader1.Notice TextBox1.Text = caption End Sub End Class
===== 案3:拡張プロバイダで処理する =====
'--- Reader クラス --- Imports System.ComponentModel <ProvideProperty("IsResultViwer", GetType(TextBox))> _ Public Class Reader Inherits Component Implements IExtenderProvider Private textBoxes As New List(Of TextBox)() ''' <summary>拡張プロパティを実装可能なコントロールかどうかを調べる</summary> Public Function CanExtend(extendee As Object) As Boolean Implements IExtenderProvider.CanExtend Return TypeOf extendee Is TextBox End Function Public Sub Kansi() Dim data As String = "監視データ" For Each box In textBoxes box.Text = data Next End Sub
#Region "IsResultViwer 拡張プロパティ" <DefaultValue(False)> Public Function GetIsResultViwer(target As TextBox) As Boolean Return textBoxes.Contains(target) End Function Public Sub SetIsResultViwer(target As TextBox, value As Boolean) If target Is Nothing Then Return If value AndAlso Not textBoxes.Contains(target) Then textBoxes.Add(target) ElseIf Not value AndAlso textBoxes.Contains(target) Then textBoxes.Remove(target) End If End Sub #End Region End Class
'--- AForm クラス --- ・Dim reader1 As New Reader() の行は削除します(reader2〜reader4 も同様) ・Load メソッドや Kansi メソッドを呼び出す部分のコードは書き換え不要です。 ・ツールボックスに Reader クラスが追加されているので、それをフォーム上に貼り付けます。 これが元の reader1〜reader4 変数の代わりになります。 ・フォームデザイナーで TextBox のプロパティを見ると、「Reader1 の IsResultViewer」という メンバーが追加されるので、それを True に変更すれば完了です。 ・reader1.Kansi() が呼び出された時点で、デザイン時に指定したテキストボックスに表示されます。
|