コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
Option Explicit On
Option Strict On
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
<Assembly: TagPrefix("BaseLibrary.Controls", "custom")>
Namespace Controls
<ToolboxData("<{0}:BaseRadioButton runat=""server"" ID=""rdoControlId1"" />")>
Public Class BaseRadioButton
Inherits RadioButton
Public Property RenderSpan As Boolean = True
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
'出力先を独自のTextWriterとして出力する
MyBase.Render(New RadioButtonWriterWrapper(writer, Me))
End Sub
End Class
'''<summary>
'''属性を変更して出力するためのTextWriter
'''</summary>
Public Class RadioButtonWriterWrapper
Inherits HtmlTextWriter
Private _control As BaseRadioButton
Public Sub New(ByVal writer As HtmlTextWriter, ByVal control As BaseRadioButton)
MyBase.New(writer)
'コントロールのインスタンスを保持する
Me._control = control
End Sub
''' <summary>
''' spanタグを出力しない
''' </summary>
''' <param name="name"></param>
''' <param name="key"></param>
''' <returns></returns>
Protected Overrides Function OnTagRender(name As String, key As HtmlTextWriterTag) As Boolean
If Me._control.RenderSpan = False AndAlso
key = HtmlTextWriterTag.Span Then
Return False
End If
Return MyBase.OnTagRender(name, key)
End Function
'''<summary>
'''属性を追加する
'''</summary>
'''<param name="key">属性を表す列挙値</param>
'''<param name="value">属性に設定する値</param>
'''<remarks>
'''RadioButtonが属性の設定のために本メソッドを呼び出すため、本メソッドで変更したい属性値を設定する
'''</remarks>
Public Overrides Sub AddAttribute(ByVal key As HtmlTextWriterAttribute, ByVal value As String)
Select Case key
Case HtmlTextWriterAttribute.Class
'spanタグを出力しない場合、InputのClassにCssClassの値を振り替えます。
If Me._control.RenderSpan = False Then
Me._control.InputAttributes.Add("class", _control.CssClass)
Else
MyBase.AddAttribute(key, value)
End If
Case Else
MyBase.AddAttribute(key, value)
End Select
End Sub
End Class
End Namespace
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="ListViewTest.aspx.vb" Inherits="ListViewTest.ListViewTest" %>
<%@ Register Assembly="BaseLibrary" Namespace="BaseLibrary.Controls" TagPrefix="custom" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body>
<form id="form1" runat="server">
<div class="asp.net native RadioButton">
<asp:RadioButton ID="rdoYes" runat="server" Text="Yes" CssClass="test" GroupName="GroupName1" />
<asp:RadioButton ID="rdoNo" runat="server" Text="No" CssClass="test" GroupName="GroupName1" />
</div>
<div class="asp.net native CheckBox">
<asp:CheckBox ID="chkYes" runat="server" Text="Yes" CssClass="test"/>
<asp:CheckBox ID="chkNo" runat="server" Text="No" CssClass="test"/>
</div>
<div class="asp.net custom RadioButton">
<custom:BaseRadioButton ID="rdoYesEx" runat="server" Text="Yes" CssClass="test" GroupName="GroupName2" RenderSpan="False"/>
<custom:BaseRadioButton ID="rdoNoEx" runat="server" Text="No" CssClass="test" GroupName="GroupName2" RenderSpan="False"/>
</div>
<div class="asp.net custom CheckBox">
<custom:BaseCheckBox ID="chkYesEx" runat="server" Text="Yes" CssClass="test" RenderSpan="False"/>
<custom:BaseCheckBox ID="chkNoEx" runat="server" Text="No" CssClass="test" RenderSpan="False"/>
</div>
</form>
</body>
</html>
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。