カスタムPanel-Expander-Moduleを作成しようとしています。 Expanderは機能しますが、古いコードをカットしてプレースホルダにコピーしようとすると、VS2015はエラーがあることを知らせます。プレースホルダ内のコントロールまたはクリックイベントにアクセスできない
- エラー:「lstXYZは」、その保護レベルにはアクセスできない可能性が宣言されていない
- エラー:句が含まタイプまたはその基本タイプのいずれかで定義されたWITHEVENTS変数を必要とハンドル
ここでのコードの例である:パネルのプレースホルダを保持
ユーザーコントロール(panelExpander.ascx):
デpanelExpander.vbで<%-- Begin Panel Wrapper --%>
<div id="panelContainer" class="Panel collapseable slim" runat="server">
<asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
<%-- Begin Panel Header --%>
<div class="panel-header PanelHeader">
<span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
<div class="PanelToggleIcon">
<img id="panelToggleIcon" src="" runat="server">
</div>
</div>
<%-- End Panel Header --%>
<%-- Begin Panel Content --%>
<div id="panelContentContainer" class="panel-content" runat="server">
<asp:PlaceHolder runat="server" ID="phPanelContent" />
</div>
<%-- End Panel Content --%>
</div>
<%-- End Panel Wrapper --%>
:
''' <summary>
''' ***
''' </summary>
''' <returns></returns>
<PersistenceMode(PersistenceMode.InnerProperty)>
Public Property PanelHeader As ITemplate
''' <summary>
''' ***
''' </summary>
''' <returns></returns>
<PersistenceMode(PersistenceMode.InnerProperty)>
Public Property PanelContent As ITemplate
''' <summary>
''' ***
''' </summary>
''' <param name="sender">sender</param>
''' <param name="e">event Arguments</param>
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Initialize() 'setting some classes etc nothing special
If (IsPostBack) Then
'do stuff
End If
End Sub
上記のコードは正常に動作しています。私のような何も特別でそれを養う場合:
<%-- Loaded Usercontrol with placeholders --%>
<uc:PanelExpander runat="server">
<%--Panel header--%>
<PanelHeader>
<p>Header Text</p>
</PanelHeader>
<%--Panel content--%>
<PanelContent>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
</PanelContent>
</uc:PanelExpander>
問題はMyEditMask.ascxナドMyEditMask.vbにここに原因で発生します(エラーがある)MyEditMask.vbで
<%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
<uc:PanelExpander runat="server">
<panelheader>
<%-- Nothign happens here, works fine. --%>
<asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
</panelheader>
<panelcontent>
<%-- seems ok in ascx but in codebehin it throws errors --%>
<asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
<%-- seems ok in ascx but in codebehin it throws errors --%>
<asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
</panelcontent>
</uc:PanelExpander>
:
''' <summary>
''' ****
''' </summary>
''' <remarks></remarks>
Private Sub FillListBox()
'Do stuff
' Can't access lstAvailable
'-> "lstAvailable" not declared it may be inaccessible due to its protection level
lstAvailable.Items.Clear()
'Do Stuff
End Sub
''' <summary>
''' ***
''' </summary>
Private Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click
'btnAdd throws error
'-> Handles clause requires a WithEvents variable defined in the
'containing type or one of its base types
'Do Stuff
End Sub
何らかの理由で、デザイナーでもコントロールが消えるため少し奇妙に感じます。これは、プレースホルダを使用する前にすべて機能しました。プレースホルダーにコピーしたコントロールがMyEditMask.vbとMyEditMask.ascxのビューから消えてしまったという気がします。それでも私は理由を理解できません。
誰かが私を助けることを願って、私はおかしくなりそうだ、それはとても簡単そうですが、高度でまだ...
ありがとう!
これは、lstAvailableとbtnAddが別のコントロールの内部にあるために起こっています... ClientIDMode = "Static"をページ宣言またはリストビューに追加してボタン – Mych