2009年06月11日


valueとtextを扱うコンボボックス

コレクションに add されるオブジェクトの ToString メソッド
の戻り値が、リストのテキストに使用されるので、内部にvalue
とtextを同時に管理するクラスを作成して実装しています
Public Class R205Combo

	' ****************************************************** 
	' データクリア
	' ****************************************************** 
	Public Sub Clear()

		Me.Items.Clear()

	End Sub

	' ****************************************************** 
	' 選択された値
	' ****************************************************** 
	Public Shadows Property SelectedValue() As String
		Get
			If Me.SelectedIndex <> -1 Then
				Return CType(Me.Items(Me.SelectedIndex), DataClass).Value
			Else
				Return ""
			End If
		End Get
		Set(ByVal value As String)
			If Me.SelectedIndex <> -1 Then
				CType(Me.Items(Me.SelectedIndex), DataClass).Value = value
			End If
		End Set
	End Property

	' ****************************************************** 
	' 選択されたテキスト
	' ****************************************************** 
	Public Shadows Property SelectedText() As String
		Get
			Return CType(Me.Items(Me.SelectedIndex), DataClass).Text
		End Get
		Set(ByVal value As String)
			CType(Me.Items(Me.SelectedIndex), DataClass).Text = value
		End Set
	End Property

	' ****************************************************** 
	' 選択
	' ****************************************************** 
	Public Sub SelectByValue(ByVal value As String)

		Dim max As Integer = Me.Items.Count
		For i As Integer = 0 To max - 1
			If CType(Me.Items(i), DataClass).Value = value Then
				Me.SelectedIndex = i
				Exit For
			End If
		Next

	End Sub

	' ****************************************************** 
	' 選択
	' ****************************************************** 
	Public Sub SelectByText(ByVal text As String)

		Me.SelectedIndex = Me.FindString(text)

	End Sub

	' ****************************************************** 
	' コントロールの初期化
	' ****************************************************** 
	Protected Overrides Sub OnCreateControl()

		Me.DropDownStyle = Windows.Forms.ComboBoxStyle.DropDownList

		MyBase.OnCreateControl()

	End Sub

	' ****************************************************** 
	' データ追加
	' ****************************************************** 
	Public Sub Add(ByVal text As String, ByVal value As String)

		Me.Items.Add(New DataClass(text, value))

	End Sub


	' ****************************************************** 
	' データ保存用
	' ****************************************************** 
	Private Class DataClass

		Public Text As String
		Public Value As Object

		Public Sub New(ByVal _text As String, ByVal _value As Object)

			Me.Text = _text
			Me.Value = _value

		End Sub

		Public Overrides Function ToString() As String
			Return Text
		End Function

	End Class


End Class

以下は、継承とデザイナ用の定義が納められた Partial Class ですが、
UserControl を書き換えているだけです
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class R205Combo
	Inherits System.Windows.Forms.ComboBox

    'UserControl はコンポーネント一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
    'Windows フォーム デザイナを使用して変更できます。  
    'コード エディタを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
	End Sub

End Class

posted by at 2009-06-11 16:03 | VB.NET Framework2.0 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します