トップ回答者
デリゲートを利用したコントロールの状態遷移

質問
-
webフォーム上でDetailsViewの外に配置したボタンから、DetailsViewの状態を制御させたいと思っております。
その際に、デリゲートを用いているのですが1点だけ引っかかるところがあったので投稿させていただきました。
以下、ソースの抜粋になります。
Code SnippetPartial Class tstVB
Inherits System.Web.UI.Page'ページロード時イベントハンドラ
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load'モード変更時デリゲートを追加
Authors1.onModeChange += onFormViewModeChange()
End Sub'「確認」ボタン押下時イベントハンドラ
・・・(略)'「更新」ボタン押下時イベントハンドラ
・・・(略)
'FormView モード変更時デリゲートメソッド
Private Sub onFormViewModeChange(ByVal bEdit As Boolean)
If bEdit = False Then
'ボタン表示状態変更
Button_Confirm.Enabled = True
Button_Update.Enabled = False
Else
'ボタン表示状態変更
Button_Confirm.Enabled = False
Button_Update.Enabled = False
End If
End SubEnd Class
Partial Class authors
Inherits System.Web.UI.UserControl'モード変更時コールバック実行用デリゲート
Public Delegate Sub ModeChange(ByVal bEdit As Boolean)
Public onModeChange As ModeChange = Nothing'FormView モード(追加版)プロパティ
Private _formViewMode As eFormViewMode = eFormViewMode.MODE_EDITEDIT
Public Property FormViewMode() As eFormViewMode
Get
Return _FormViewMode
End Get
Set(ByVal value As eFormViewMode)
_formViewMode = value
'セッション情報に保存
Session(_strFormViewMode) = _formViewMode
Select Case _formViewMode
Case eFormViewMode.MODE_EDITEDIT
' FormView を Edit モードに変更
FormView1.ChangeMode(WebControls.FormViewMode.Edit)
'テキストボックスの状態変更
changeModeEditEdit()
Case eFormViewMode.MODE_EDITCONFIRM
'テキストボックスの状態変更
changeModeEditConfirm()
Case eFormViewMode.MODE_READONLY
'FormView を ReadOnly モードに変更
FormView1.ChangeMode(WebControls.FormViewMode.ReadOnly)
End Select'親側のボタン状態変更
If Not onModeChange Is Nothing Then
onModeChange(_formViewMode <> eFormViewMode.MODE_READONLY)
End If
End Set
End Property'FormView モード(追加版)セッション識別子
Private _strFormViewMode As String = "FormViewMode・・・(略)
End Class
上記1つ目のコード中のAuthors1.onModeChange += onFormViewModeChange()では
onFormViewModeChangeに引数を指定しろときます。また、とりあえずという形でTrue/Falseの値を設定してみても「式は値を生成しません」となってしまいます。上記コード中をどういうふうに修正すればうまくいくのか、ご意見・ご指摘などありましたらお願いします。
回答
-
閣下 さん、こんにちは
ダッチです。
こちらの部分を次のようにしてみてはどうでしょうか。
Code Snippet' Authors1.onModeChange += onFormViewModeChange()
Authors1.onModeChange = AddressOf onFormViewModeChange
もっと丁寧に書くと次のようになります。
Code SnippetAuthors1.onModeChange = New authors.ModeChange(AddressOf onFormViewModeChange)+= は C# のときの使い方だと思います。
Visual Basic では AddressOf を使用してデリゲートを使用します。
イベントハンドラの動的関連付けも AddressOf を使用します。
すべての返信
-
閣下 さん、こんにちは
ダッチです。
こちらの部分を次のようにしてみてはどうでしょうか。
Code Snippet' Authors1.onModeChange += onFormViewModeChange()
Authors1.onModeChange = AddressOf onFormViewModeChange
もっと丁寧に書くと次のようになります。
Code SnippetAuthors1.onModeChange = New authors.ModeChange(AddressOf onFormViewModeChange)+= は C# のときの使い方だと思います。
Visual Basic では AddressOf を使用してデリゲートを使用します。
イベントハンドラの動的関連付けも AddressOf を使用します。