Rizki Pratama A former programmer • rizkipratama.com

[Archived] Tutorial UWP #4 – Add Event Handler to Control Element

5 min read

Illustration image

Peringatan: Artikel ini dikategorikan sebagai archived. Artinya artikel ini tidak akan dirawat, diperbarui, ataupun dijadikan sebagai bahan diskusi.

Halo teman-teman! Kita bertemu lagi di seri tutorial UWP yang kini sudah memasuki bagian keempat yang di dalamnya akan dibahas cara menambahkan event handler ke elemen kontrol.

Sebelum saya melanjutkan, mungkin di antara kamu ada yang belum tau, apa sih event dan event handler itu?

Pasti kamu sering dan mungkin hampir setiap hari berinteraksi dengan aplikasi dan elemen-elemennya. Misalnya, ketika kamu mengeklik sebuah button, maka halaman aplikasi akan berpindah ke halaman yang lain. Magic apa yang sebenarnya terjadi? Apakah cukup dengan bermain if saja?

Nah, di sini lah event handler berperan. Terdapat 3 komponen untuk dapat membahas event handler: event, trigger, dan action. Lalu, apa definisi dari event handler itu sendiri? Di sini saya tidak akan menjelaskannya sendiri, saya akan mengutip definisi dari website Microsoft Developer Network.

Apa itu event?

An event is a message sent by an object to signal the occurrence of an action. The action could be caused by user interaction, such as a button click, or it could be raised by some other program logic, such as changing a property’s value.
To respond to an event, you define an event handler method in the event receiver. This method must match the signature of the delegate for the event you are handling. In the event handler, you perform the actions that are required when the event is raised, such as collecting user input after the user clicks a button. To receive notifications when the event occurs, your event handler method must subscribe to the event.

Lalu, bagaimana dengan event handler?

To respond to an event, you define an event handler method in the event receiver. This method must match the signature of the delegate for the event you are handling. In the event handler, you perform the actions that are required when the event is raised, such as collecting user input after the user clicks a button. To receive notifications when the event occurs, your event handler method must subscribe to the event.

(*) Untuk pengetahuan lebih jelas mengenai event khusus .NET Framework (C#), silakan ikuti artikel MSDN ini.

Catatan: Agar kamu dapat mengikuti tutorial ini, pastikan kamu sudah mengikuti tutorial sebelumnya, karena saya akan menggunakan code dari sana.


Baca tutorial sebelumnya: Cara Menambahkan Elemen Kontrol (Control Element) di Aplikasi UWP


Sebelum kita memulai tutorial ini, mari kita lakukan perubahan nilai property pada elemen PasswordBox dan penambahan elemen TextBlock ke aplikasi.

Atur nilai property IsEnabled dari elemen PasswordBox menjadi False.

<!-- Kode 1 -->
<PasswordBox 
  x:Name="passwordBox"
  HorizontalAlignment="Center"
  VerticalAlignment="Top"
  Margin="0,240,0,0"
  Width="200"
  PlaceholderText="Password" 
  IsEnabled="False"
/>

PasswordBox.IsEnabled merupakan property yang menentukan apakah kotak input elemen tersebut diaktifkan atau dinonaktifkan. Nilai default property tersebut pada elemen PasswordBox adalah True.

Setelah itu kita tambahkan elemen TextBlock, dengan memasukkan code ini tepat di bawah elemen Button.

<!-- Kode 2 -->
<TextBlock
  x:Name="textBlock"
  HorizontalAlignment="Center"
  TextWrapping="Wrap"
  Text=""
  Margin="0,420,0,0"
  TextAlignment="Center"
/>

Jika kamu memasukkannya dengan benar, maka kode keseluruhan akan terlihat seperti Kode 3.

<!-- Kode 3 -->
<Page
  x:Class="UWP_Tut_Proj_1.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:UWP_Tut_Proj_1"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d">
  <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBox x:Name="textBox" HorizontalAlignment="Center" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Margin="0,200,0,0" PlaceholderText="Username" Width="200"/>
    <PasswordBox x:Name="passwordBox" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,240,0,0" Width="200" PlaceholderText="Password" IsEnabled="False"/>
    <CheckBox x:Name="checkBox" Content="Remember me" HorizontalAlignment="Center" Margin="0,290,0,0" VerticalAlignment="Top"/>
    <Button x:Name="button" Content="Log In" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,360,0,0" Width="80"/>
    <TextBlock x:Name="textBlock" HorizontalAlignment="Center" TextWrapping="Wrap" Text="" Margin="0,420,0,0" TextAlignment="Center"/>
  </Grid>
</Page>

Sekarang mari kita bermain dengan event handler. Klik panah di sebelah kiri MainPage.xaml sehingga muncul sub item dan klik ganda file MainPage.xaml.cs hingga muncul di code editor.

Gambar 1. Navigasikan ke file MainPage.xaml.cs
Gambar 1. Navigasikan ke file MainPage.xaml.cs

Pertama kita akan menambahkan fungsi aksi yang dipicu elemen TextBox yang memicu aksi perubahan nilai properti elemen TextBox itu sendiri.

Berikut adalah skenarionya: Jika user mengetik kata “bold” di TextBox, maka teks yang ada di TextBox menjadi cetak tebal (bold). Jika user mengetik kata “softtama” di TextBox, maka warna border TextBox berubah menjadi hijau.

Lalu, mana yang disebut event, trigger, dan action? Terjadinya ketikan (dalam hal ini terjadinya perubahan teks) di TextBox adalah event, mengetik kata “bold” atau “softtama” di TextBox adalah trigger, dan mengubah teks menjadi cetak tebal dan warna border menjadi hijau di TextBox adalah action.

Untuk menambahkan aksi berdasarkan skenario tersebut, tambahkan Kode 4 ke MainPage.xaml.cs ke dalam class MainPage tepat di bawah constructor function MainPage.

// Kode 4
public void textBox_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args) {
  if (sender.Text.Contains("bold")) {
    sender.FontWeight = Windows.UI.Text.FontWeights.Bold;
  }
  if (sender.Text.Equals("softtama")) {
    sender.BorderBrush = new SolidColorBrush(Colors.Green);
  }
}

Selanjutnya kita akan menambahkan aksi yang dipicu oleh elemen TextBox, namun memicu aksi perubahan pada elemen lain, dalam hal ini adalah elemen PasswordBox.

Berikut skenarionya: Jika terdapat kata “softtama” di TextBox, maka aktifkan PasswordBox. Selain kata “softtama”, nonaktifkan PasswordBox.

Untuk menambahkan aksi dari skenario tersebut, tambahkan operasi perubahan nilai properti IsEnabled seperti yang tampak pada Kode 5 ke MainPage.xaml.cs di dalam function textBox_TextChanging.

// Kode 5
public void textBox_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args) {
  if (sender.Text.Contains("bold")) {
    sender.FontWeight = Windows.UI.Text.FontWeights.Bold;
  }
  if (sender.Text.Equals("softtama")) {
    passwordBox.IsEnabled = true;
    sender.BorderBrush = new SolidColorBrush(Colors.Green);
  } else {
    passwordBox.IsEnabled = false;
  }
}

Perlu kamu ketahui bahwa Kode 4 dan Kode 5 yang baru saja kamu masukkan ke MainPage.xaml.cs hanyalah baris-baris fungsi aksi saja dan tidak memiliki elemen pemicu.

Jadi, apa yang harus dilakukan agar fungsi aksi tersebut dipanggil ketika event dari suatu elemen pemicu terjadi?

Dalam ranah pemrograman C#, hal tersebut dikatakan sebagai subscribe. Maksudnya adalah kita menjadikan suatu fungsi aksi terpanggil ketika suatu event yang di-subscribe terjadi. Jadi bagaimana cara men-subscribe fungsi aksi ke event dari suatu elemen pemicu?

Lihatlah Kode 6 di bawah ini, yang merupakan struktur kode untuk men-subscribe fungsi aksi actionFunctionName ke event EventName dari elemen pemicu triggerElementName.

// Kode 6
triggerElementName.EventName += actionFunctionName;

Untuk men-subscribe fungsi aksi tersebut ke elemen pemicu, masukkan Kode 7 berikut ke dalam constructor function MainPage.

// Kode 7
textBox.TextChanging += textBox_TextChanging;

Sekarang deploy project nya, lalu coba ketik kata “bold” di field Username, dan lihat yang terjadi. Jika kamu mengikutinya dengan tepat, maka teks akan menjadi cetak tebal (bold) seperti yang terlihat pada Gambar 2.

Gambar 2. Ketika mengetik kata "bold" di field Username, teksnya menjadi cetak tebal (bold).
Gambar 2. Ketika mengetik kata “bold” di field Username, teksnya menjadi cetak tebal (bold).

Lalu coba ketik kata “softtama” di field yang sama, maka yang terjadi adalah apa yang tampak pada Gambar 3.

Gambar 3. Ketika mengetik kata "softtama" di field Username, border field menjadi warna hijau dan elemen PasswordBox menjadi aktif.
Gambar 3. Ketika mengetik kata “softtama” di field Username, border field menjadi warna hijau dan elemen PasswordBox menjadi aktif.

Sekarang, mari kita tambahkan event handler untuk elemen kontrol Button, dengan skenario: ketika kita mengeklik elemen Button, dengan syarat field TextBox Username tidak kosong, tampilkan teks “Username: ” ditambah teks yang diambil dari field TextBox Username, lalu pada baris baru tampilkan teks “Remember me?: ” ditambah teks yang bergantung dari nilai IsChecked dari elemen kontrol CheckBox (“Yes” untuk True, “No” untuk False).

Tambahkan Kode 8 ini di dalam class MainPage tepat di bawah function textBox_TextChanging.

// Kode 8
public void button_Click(object sender, RoutedEventArgs args) {
  if (!textBox.Text.Equals("")) {
    string username = textBox.Text,
      rememberMe = (bool) checkBox.IsChecked ? "Yes" : "No";

    textBlock.Text = "Username: " + username + "\n\n" + "Remember me?: " + rememberMe;
  }
}

Untuk men-subscribe fungsi aksi button_Click ke elemen Button, tambahkan kode subscribe-nya ke dalam constructor function MainPage sehingga keseluruhannya tampak seperti pada Kode 9.

// Kode 9
textBox.TextChanging += textBox_TextChanging;
button.Click += button_Click;

Sebelum melanjutkan, cek terlebih dahulu apakah kode yang telah kamu ketik selama ini di dalam class MainPage di dalam file MainPage.xaml.cs tampak seperti pada Kode 10 di bawah ini.

// Kode 10
public sealed partial class MainPage : Page {
  public MainPage() {
    this.InitializeComponent();
    textBox.TextChanging += textBox_TextChanging;
    button.Click += button_Click;
  }

  public void textBox_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args) {
    if (sender.Text.Contains("bold")) {
      sender.FontWeight = Windows.UI.Text.FontWeights.Bold;
    }

    if (sender.Text.Equals("softtama")) {
      passwordBox.IsEnabled = true;
      sender.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Green);
    } else {
      passwordBox.IsEnabled = false;
    }
  }

  public void button_Click(object sender, RoutedEventArgs args) {
    if (!textBox.Text.Equals("")) {
      string username = textBox.Text,
        rememberMe = (bool) checkBox.IsChecked ? "Yes" : "No";

      textBlock.Text = "Username: " + username + "\n\n" + "Remember me?: " + rememberMe;
    }
  }
}

Jika sudah mantap, deploy project-nya, dan lakukan skenarionya. Hasilnya akan seperti pada Gambar 4 untuk aplikasi yang berjalan di PC dan Gambar 5 untuk aplikasi yang berjalan di mobile.

Gambar 4. Demo skenario untuk event handler button_Click pada aplikasi yang berjalan di PC.
Gambar 4. Demo skenario untuk event handler button_Click pada aplikasi yang berjalan di PC.
Gambar 5. Demo skenario untuk event handler button_Click pada aplikasi yang berjalan di mobile.
Gambar 5. Demo skenario untuk event handler button_Click pada aplikasi yang berjalan di mobile.

Tidak lupa, di bawah ini saya lampirkan juga source code project dan App Packages untuk tutorial ini bagi kamu yang ingin mencobanya langsung tanpa mengikuti tutorial ini.


Sekian dari saya tentang tutorial UWP bagian keempat yang menjelaskan cara menambahkan event handler di aplikasi Windows 10 UWP. Jika kamu punya pertanyaan ataupun masalah mengenai tutorial ini, jangan lupa untuk menuliskannya di kolom komentar artikel ini, ya! Sampai jumpa di artikel tutorial berikutnya!

Rizki Pratama A former programmer • rizkipratama.com