VB のたまご

作成日: 2017/03/05, 更新日: 2017/03/05



Slider

    イメージ
  •  Slider は、ListBox の数字のみバージョンです。任意の範囲(0~100等)から1つ値を決定する機能を提供するコントロールです。 とりあえずどういう風に動くのか見てみましょう。 以下サンプルです。「SliderWindow1」という画面で作成していますが、「MainWindow」に書いても構いません。

  • スポンサーリンク


    <Window x:Class="SliderWindow1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="SliderWindow1" Height="300" Width="300">
    
        <StackPanel>
    
            <Slider Name="slider1" Margin="10" ValueChanged="ValueChanged" />
            <Slider Name="slider2" Margin="10" ValueChanged="ValueChanged"
                     Orientation="Vertical" Height="100" />
            <TextBlock Name="textblock1" />
    
        </StackPanel>
        
    </Window>
    

    Public Class SliderWindow1
    
        Private Sub ValueChanged(sender As Object, e As RoutedEventArgs)
    
            Dim ctrl = CType(e.Source, Slider)
            Me.textblock1.Text = $"{ctrl.Name} は、{ctrl.Value} に変更"
    
        End Sub
    
    End Class
    

  •  Slider の向きは、Orientation で変更します。「Horizontal(水平方向{横方向})」、または「Vertical(垂直方向{縦方向})」です。

  •  イベント引数の e.Source には呼び出し元のコントロールが入っているため、ここからコントロール(の選択値)を取得します。 値が変更した場合のイベント ValueChanged を使って、値変更時の処理を記載しています。 値が変更した際の処理が共通なため、2つのコントロールには同じイベントハンドラを割り当てています。

  • スポンサーリンク


  •  このままだとメモリ値が無いため分かりづらいですので、メモリ値も表示するように設定してみます。

  • <Window x:Class="SliderWindow2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="SliderWindow2" Height="300" Width="300">
    
        <StackPanel>
    
            <Slider Margin="10" TickPlacement="None" />
            <Slider Margin="10" TickPlacement="BottomRight" />
            <Slider Margin="10" TickPlacement="TopLeft" />
            <Slider Margin="10" TickPlacement="Both" />
    
            <StackPanel Background="AliceBlue">
                <Slider Name="slider1" Margin="10" Minimum="0" Maximum="100" ValueChanged="ValueChanged" />
                <TextBlock Name="textblock1" Margin="10" />
            </StackPanel>
    
        </StackPanel>
    
    </Window>
    

    Public Class SliderWindow2
    
        Private Sub ValueChanged(sender As Object, e As RoutedEventArgs)
    
            Dim ctrl = CType(e.Source, Slider)
            Me.textblock1.Text = $"{ctrl.Name} は、{CInt(ctrl.Value)} に変更"
    
        End Sub
    
    End Class
    

  •  メモリ値は TickPlacement に、「None」、「BottomRight」、「TopLeft」、「Both」をセットして表示します。 縦方向バージョンは以下のとおりです。

  • <Window x:Class="SliderWindow3"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="SliderWindow3" Height="300" Width="500">
    
        <StackPanel Orientation="Horizontal">
    
            <Slider Margin="10" TickPlacement="None" Orientation="Vertical"/>
            <Slider Margin="10" TickPlacement="BottomRight" Orientation="Vertical"/>
            <Slider Margin="10" TickPlacement="TopLeft" Orientation="Vertical"/>
            <Slider Margin="10" TickPlacement="Both" Orientation="Vertical"/>
    
            <StackPanel Background="AliceBlue" Orientation="Horizontal">
                <Slider Name="slider1" Margin="10" 
                        Minimum="0" Maximum="100" ValueChanged="ValueChanged" 
                        Orientation="Vertical" />
                <TextBlock Name="textblock1" Margin="10" />
            </StackPanel>
    
        </StackPanel>
    
    </Window>
    

    Public Class SliderWindow3
    
        Private Sub ValueChanged(sender As Object, e As RoutedEventArgs)
    
            Dim ctrl = CType(e.Source, Slider)
            Me.textblock1.Text = $"{ctrl.Name} は、{CInt(ctrl.Value)} に変更"
    
        End Sub
    
    End Class