Farhad Alaydrus - Yet Another Geek's Blog

See also: Other Geeks@INDC

Silverlight 5: Mendeteksi Triple Click Dengan ClickCount

Pada tulisan sebelumnya tentang Double Click dengan ClickCount, saya mencoba mendeteksi double click. Kini saya ingin mencoba untuk mendeteksi Triple Click. Sebenarnya triple click jarang digunakan, namun saya penasaran dan ingin mencoba. Smile

Baiklah, andaikan kita punya sebuiah rectangle yang akan kita jadikan sebagai sebuah kontrol

<UserControl x:Class="MouseClickCountDemo.MainPage"
            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"
            mc:Ignorable="d"
            d:DesignHeight="300"
            d:DesignWidth="400">
            <Grid x:Name="LayoutRoot" Background="White">
                        <Rectangle x:Name="MyRect"
                                    Width="100"
                                    Height="100"
                                    MouseLeftButtonDown="MyRect_MouseLeftButtonDown"
                        Fill="Blue" />
            </Grid>
</UserControl>

Pada awalnya, saya memodifikasi kode c# dari posting saya sebelumnya (Double Click dengan ClickCount) menjadi:

private void MyRect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Click Count: " + e.ClickCount);
    if (e.ClickCount == 2)
    {
        System.Diagnostics.Debug.WriteLine("Saya diklik dua kali alias double click");
    }

    else if (e.ClickCount == 3)
    {
        System.Diagnostics.Debug.WriteLine("Saya diklik tiga kali alias triple click");
    }  
}

namun ternyata tidak behasil. Menurut beberapa sumber yang saya baca, salah satunya adalah blog 10REM.Net, untuk mendeteksi triple click, kita perlu mendefinisikan batas waktu yang ditolerir untuk sebuah click delay. Jadi klik ketiga akan dianggap sebagai Triple Click jika masih berada pada delay click yang sesuai threshold. Oleh karena itu kita memerlukan Timer untuk memperoleh fitur Triple Click. Pada kode C#, kita perlu membuat kode seperti ini:

private TimeSpan clickThreshold = TimeSpan.FromMilliseconds(500);
private int clickCount = 0;
private DispatcherTimer clickTimer = new DispatcherTimer();
     
void MyRect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    clickCount = e.ClickCount;
 
    if (e.ClickCount >= 2 && !clickTimer.IsEnabled) //setelah terjadi dua kali klik
    {
        clickTimer.Interval = clickThreshold;
        clickTimer.Tick += TimerTick;
        clickTimer.Start();
    }
    else if (e.ClickCount < 2)
    {
        clickTimer.Stop();
    }
}
 
private void TimerTick(object sender, EventArgs e)
{
    clickTimer.Stop();
    clickTimer.Tick -= TimerTick;
 
    if (clickCount == 2)
    {
        System.Diagnostics.Debug.WriteLine("Terjadi Double CLick");
    }
    else if (clickCount == 3)
    {
        System.Diagnostics.Debug.WriteLine("Terjadi Triple Click!");
    }
}

Dengan cara demikian kita dapat mendeteksi Triple Click pada Silverlight 5. Semoga bermanfaat. Open-mouthed smile

Share this post: | | | |

Comments

No Comments