Sabtu, 30 Oktober 2010

Access Modifier VB.NET Version

ketika bekerja dengan paradigma OO, access modifier merupakan salah satu point penting yang harus diperhatikan ketika menulis code. dengan menggunakan access modifier, programmer bisa membatasi type yang ditulis (apakah class, method, property, field, etc.) dapat diakses dari mana saja.

sama seperti C#, untuk VB.NET, access modifier yang dapat digunakan juga ada 5, yaitu: Public, Friend, Protected, Private dan Protected Friend

berikut ini penjelasan dari masing-masing access modifier:

1. Public

type yang menggunakan access modifier ini membuat type tersebut bisa diakses tanpa pembatasan apapun. secara default.

2. Friend

type yang menggunakan access modifier ini membuat type tersebut bisa diakses selama dalam satu assembly yang sama. assembly di sini berarti sebuah dll.

Friend ini merupakan access modifier default yang digunakan untuk class yang tidak menuliskan access modifiernya secara explicit.

Friend lebih terbatas dari Public.

3. Protected

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan dan turunan dari type yang bersangkutan.

Protected lebih terbatas dari Friend.

4. Private

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan.

private merupakan access modifier yang paling secure. semua type yang dilabeli access modifier private membuat type tersebut tidak dapat diakses dari luar type yang bersangkutan.

5. Protected Friend

access modifier ini merupakan pengabungan dari dari Protected dan Friend. dengan menggunakan access modifier ini, maka sebuah type dapat diakses dari dalam class yang bersangkutan, atau dari turunan class yang bersangkutan atau dalam satu assembly yang sama.

ok, semoga bermanfaat

Rgds
Adi

Access Modifier C# Version

ketika bekerja dengan paradigma OO, access modifier merupakan salah satu point penting yang harus diperhatikan ketika menulis code. dengan menggunakan access modifier, programmer bisa membatasi type yang ditulis (apakah class, method, property, field, etc.) dapat diakses dari mana saja.

untuk C#, access modifier yang dapat digunakan ada 5, yaitu: public, internal, protected, private dan protected internal

berikut ini penjelasan dari masing-masing access modifier:

1. public

type yang menggunakan access modifier ini membuat type tersebut bisa diakses tanpa pembatasan apapun. secara default, enumeration dan interface menggunakan access modifier ini.

2. internal

type yang menggunakan access modifier ini membuat type tersebut bisa diakses selama dalam satu assembly yang sama. assembly di sini berarti sebuah dll.

internal lebih terbatas dari public.

3. protected

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan dan turunan dari type yang bersangkutan.

protected lebih terbatas dari internal.

4. private

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan. merupakan access modifier default yang digunakan untuk variable (field) dan method.

private merupakan access modifier yang paling secure. semua type yang dilabeli access modifier private membuat type tersebut tidak dapat diakses dari luar type yang bersangkutan.

5. protected internal

access modifier ini merupakan pengabungan dari dari protected dan internal. dengan menggunakan access modifier ini, maka sebuah type dapat diakses dari dalam class yang bersangkutan, atau dari turunan class yang bersangkutan atau dalam satu assembly yang sama.

ok, semoga bermanfaat

Rgds
Adi

Rabu, 27 Oktober 2010

Source Code Praktek Mengenai Topik Menu

sesuai dengan janji saya, berikut ini source dari topik menu yang dibahas pada praktek hari selasa tgl 26/10/2010. silahkan download dari link Ini

dan semoga bermanfaat,

 

Rgds
Adi

Minggu, 24 Oktober 2010

Create Koneksi Antara VB.NET (a.k.a B#) dengan Database SQL Server

untuk bisa bekerja dengan database dari program vb.net, langkah pertama yang harus dilakukan adalah dengan membentuk koneksi antara program dengan database servernya. pada artikel ini, database yang digunakan adalah SQL Server 2008 dengan nama database yang akan digunakan adalah OMS dan untuk user SQL Servernya yang akan digunakan adalah sa dengan sandi misalkan juga sa.

karena database yang digunakan adalah SQL Server, namespace yang akan kita manfaatkan adalah namespace System.Data.SqlClient. object class yang bertanggung jawab untuk membentuk koneksi dengan database adalah object bertipe SqlConnection.

object SqlConnection sendiri dalam membentuk koneksi ke database SQL Server memerlukan parameter yang disebut sebagai ConnectionString. ConnectionString ini sendiri adalah sebuah string yang berisi parameter-parameter yang dibutuhkan untuk membentuk koneksi itu sendiri. adapun parameter-parameter tersebut adalah:

Data Source atau Server –> menyatakan nama komputer / ip address komputer di mana database SQL Servernya berada. jika database berada satu mesin dengan aplikasi, anda bisa menggunakan localhost\<sql server instance name> atau (local)\<sql server instance name>  atau .\<sql server instance name>
untuk mengecek sql server instance name, bisa dilakukan via menu sql server configuration manager seperti yang ditunjukkan pada gambar berikut.

image

image

pada laptop saya, sql server instance name yang digunakan adalah SQL2008

Initial Catalog atau Database –> menyatakan nama database yang akan diambil / digunakan dari mesin database SQL Server yang sudah berhasil dicontact. pada artikel ini database yang akan digunakan bernama OMS.

image

Integrated Security = True | SSPI atau UID = <UserID>; PWD = <Password> –> digunakan untuk memberitahukan cara program akan melakukan koneksi ke database SQL Server, dalam hal ini ada 2 teknik yang bisa digunakan, yaitu dengan menggunakan Windows Authentication yakni dengan menggunakan account windows (via Integrated Security = True | SSPI), atau dengan menggunakan SQL Server Authentication yakni dengan menggunakan account sql server yang sudah disediakan (via UID = <UserID>; PWD = <Password>).

ok, berikut ini detail bagaimana kode proses pembentukan koneksi ke database sql server via vb.net

misalkan rancangan programnya seperti berikut ini:

image

untuk proses pembentukan koneksi, sedikitnya ada dua pendekatan yang bisa digunakan, yaitu:

Early Open – Late Closed

contoh code ditunjukkan pada sample code berikut ini:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' bentuk string ConnectionString
    ' jika menggunakan windows auth.
    Dim connString As String = _
              "Data Source = .\sql2008; Initial Catalog = OMS; Integrated Security = True"
    ' jika menggunakan sql server auth.
    'Dim connString2 As String = _
    '          "Data Source = .\sql2008; Initial Catalog = OMS; UID = sa; PWD = sa"

    ' Early open via constructor
    Public Sub New()
        InitializeComponent()
        ' create object SqlConnection dengan melewatkan parameter 
        ' yang dibutuhkan via ConnectionString
        ' jika menggunakan windows auth.
        conn = New SqlConnection(connString)
        ' atau
        ' jika menggunakan sql server auth.
        'conn = New SqlConnection(connString2)
        ' open koneksinya
        conn.Open()
        ' tampilkan state dari koneksi
        ' jika berhasil dibuka, maka akan tercetak Status Koneksi: Open
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
    End Sub

    ' late closed via event FormClosed
    Private Sub Form1_FormClosed(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        ' menutup koneksi jika ada yang sedang terbuka
        If conn IsNot Nothing Then conn.Close() : conn.Dispose()
    End Sub

End Class

Open When Needed – Closed As Soon As Possible

contoh code ditunjukkan pada sample code berikut ini:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' bentuk string ConnectionString
    ' jika menggunakan windows auth.
    Dim connString As String = _
           "Data Source = .\sql2008; Initial Catalog = OMS; Integrated Security = True"
    ' jika menggunakan sql server auth.
    'Dim connString2 As String = _
    '        "Data Source = .\sql2008; Initial Catalog = OMS; UID = sa; PWD = sa"

    ' open when needed - close ASAP (As Soon As Possible)
    Private Sub btnOpenThenClosed_Click(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles btnOpenThenClosed.Click
        ' create koneksi on demand
        conn = New SqlConnection(connString)
        conn.Open() ' open koneksi yang sudah terbentuk
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
        Application.DoEvents()
        ' biarkan sistem idle selama 3 detik
        ' anda bisa menggantinya dengan proses-proses yang ingin dikerjakan
        System.Threading.Thread.Sleep(3000)
        ' close koneksi
        conn.Close()
        ' dispose koneksi
        conn.Dispose()
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
    End Sub

End Class

Penggunaan Using

dengan menggunakan Using … End Using, programmer tidak perlu dipusingkan lagi dengan proses penutupan dan penghapusan object yang sudah tidak digunakan secara manual, karena hal tersebut akan otomatis akan ditangani oleh Using. syarat object yang bisa dipasang dengan Using … End Using adalah object yang mengimplementasikan interface IDisposable seperti object bertipe SqlConnection yang digunakan dicontoh ini. berikut bentuk perubahan code nya:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' bentuk string ConnectionString
    ' jika menggunakan windows auth.
    Dim connString As String = _
            "Data Source = .\sql2008; Initial Catalog = OMS; Integrated Security = True"
   
    ' open when needed - close ASAP (As Soon As Possible)
    Private Sub btnOpenThenClosed_Click(ByVal sender As System.Object, _
                     ByVal e As System.EventArgs) Handles btnOpenThenClosed.Click
        ' create koneksi on demand
       Using conn = New SqlConnection(connString)
            conn.Open() ' open koneksi yang sudah terbentuk
            ' cetak status koneksi terkini
            Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
            Application.DoEvents()
            ' biarkan sistem idle selama 3 detik
            ' anda bisa menggantinya dengan proses-proses yang ingin dikerjakan
            System.Threading.Thread.Sleep(3000)
        End Using
        ' dengan penggunaan Using,
        ' programmer tidak perlu lagi menutup koneksi secara manual
        ' proses penutupan dan penghapusan object dari memori akan diurus
        ' oleh Using
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", _
                            If(conn IsNot Nothing, conn.State.ToString(), "Nothing"))
    End Sub

End Class

Menggunakan MySetting properties untuk menyimpan ConnectionString

cara-cara yang dipakai pada code sebelumnya masih menggunakan penulisan ConnectionString secara hardcode. hal ini suatu saat akan menimbulkan keribetan tersendiri apabila suatu saat terjadi pemindahan server database ke lokasi dengan alamat yang berbeda dengan alamat yang digunakan saat ini. untuk itu kita bisa menyimpan string ConnectionString ke dalam file app.config via settingan properties dibagian Setting pada My Project Properties, seperti yang ditunjukkan pada gambar di bawah ini.

image

dengan menuliskan connectionstring ke dalam file app.config akan membuat proses perubahan terhadap nilai parameter dalam connectionstring lebih mudah untuk dimodifikasi, karena tidak perlu lagi menggantinya langsung dengan cara mengedit code, cuma perlu mengedit file app.config dari aplikasi yang bersangkutan saja.

image

perubahan terhadap code hanya terjadi pada proses pemanggilan connectionString saja, yaitu dengan memanggil dari object MySetting, seperti ditunjukkan oleh code di bawah ini:

' import namespace System.Data.SqlClient
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing

    ' open when needed - close ASAP (As Soon As Possible)
    Private Sub btnOpenThenClosed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenThenClosed.Click
        ' create koneksi on demand
        ' dengan menggunakan ConnectionString via MySetting Property
        Using conn = New SqlConnection(My.MySettings.Default.ConnString) 
            conn.Open() ' open koneksi yang sudah terbentuk
            ' cetak status koneksi terkini
            Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
            Application.DoEvents()
            ' biarkan sistem idle selama 3 detik
            ' anda bisa menggantinya dengan proses-proses yang ingin dikerjakan
            System.Threading.Thread.Sleep(3000)
        End Using
        ' dengan penggunaan Using,
        ' programmer tidak perlu lagi menutup koneksi secara manual
        ' proses penutupan dan penghapusan object dari memori akan diurus
        ' oleh Using
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", _
                            If(conn IsNot Nothing, conn.State.ToString(), "Nothing"))
    End Sub

End Class

Membentuk string ConnectionString Secara Runtime

dan selain menggunakan cara-cara di atas, kita juga bisa membentuk string ConnectionString secara runtime via object SqlServerConnectionStringBuilder.

untuk sample pada aplikasi ini, kita akan menyesuaikan rancangan aplikasinya menjadi seperti di bawah ini:

image image

dan code programnya adalah sebagai berikut:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' buat object SqlConnectionStringBuilder
    Dim connString As SqlConnectionStringBuilder = Nothing

    Public Sub New()
        InitializeComponent()
        Me.cboAuthType.SelectedIndex = 0
    End Sub

    Private Sub cboAuthType_KeyPress(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cboAuthType.KeyPress
        e.Handled = True
    End Sub

    Private Sub cboAuthType_SelectedIndexChanged(ByVal sender As System.Object, _
                 ByVal e As System.EventArgs) Handles cboAuthType.SelectedIndexChanged
        If Me.cboAuthType.SelectedIndex = 0 Then
            Me.txtUserID.Enabled = False
            Me.txtPassword.Enabled = False
        Else
            Me.txtUserID.Enabled = True
            Me.txtPassword.Enabled = True
        End If
    End Sub

    Private Sub btnOpen_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles btnOpen.Click
        Try
            ' validasi
            If Me.txtServerName.Text.Trim().Equals("") Then _
                Throw New Exception("Isi Server Name Please ...")
            If Me.txtDatabaseName.Text.Trim().Equals("") Then _
                Throw New Exception("Isi Database Name Please ...")
            ' membentuk object ConnectionString secara run time
            ' via object SqlConnectionStringBuilder
            connString = New SqlConnectionStringBuilder()
            With connString
                .DataSource = Me.txtServerName.Text.Trim()
                .InitialCatalog = Me.txtDatabaseName.Text.Trim()
                If Me.cboAuthType.SelectedIndex = 0 Then
                    .IntegratedSecurity = True
                Else
                    .UserID = Me.txtUserID.Text.Trim()
                    .Password = Me.txtPassword.Text.Trim()
                End If
            End With
            ' membentuk koneksi
            conn = New SqlConnection(connString.ToString())
            conn.Open() ' open koneksi
            ' cetak status koneksi terkini
            Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
        Catch ex As Exception
            connString = Nothing
            conn = Nothing
            MessageBox.Show(ex.Message, Me.Text, _
                                             MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Try
    End Sub

    Private Sub btnClosed_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles btnClosed.Click
        ' tutup koneksi
        If conn IsNot Nothing Then conn.Close() : conn.Dispose()
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", _
                            If(conn IsNot Nothing, conn.State.ToString(), "Nothing"))
    End Sub

End Class

untuk C#, anda tinggal menyesuaikan sintaks yang digunakan pada artikel ini dengan sintaks dari bahasa C#.

ok, sekian dari saya, semoga bermanfaat bagi semua.

Rgds
Adi

Jumat, 22 Oktober 2010

Demo File => Contoh Source Code Praktek Bahasa Pemrograman IV

ok, sesuai dengan janji saya, berikut ini merupakan link untuk download source code dari program yang dibahas pada  pertemuan ke-3 praktek bahasa pemrograman IV di STMIK – Mikroskil Medan Lab 7 Jam 19.00 – 21.00 materi pemrograman file dengan vb.net

source code program bisa didownload dari link berikut ini (ditulis dengan menggunakan vb 2010)

semoga bermanfaat,

Rgds
Adi

Rabu, 20 Oktober 2010

Mengakses Method Suatu Form dari Form lain (SDI Form)

ok, melanjuti postingan blog yang sebelumnya, kalau dipostingan sebelumnya, kondisi Form1 dan Form2 adalah Form1 sebagai MDIContainer dan Form2 sebagai Child Form dari Form1. muncul pertanyaan, gimana jika Form1 dan Form2 sama-sama merupakan SDI Form (Form1 bukan merupakan MDI Container), jika tetap menggunakan pendekatan yang ada dipostingan sebelumnya, ternyata teknik yang diterapkan menjadi tidak sukses alias gagal. untuk menanggulanginya, bisa digunakan Delegate untuk membypass method yang akan diakses dari Form2. lengkap nya bisa dilihat pada bagian bawah ini:

clip_image002

clip_image004

Code Program.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Code Form1.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        // delegate dan method yang akan diassign ke delegate
        public delegate void SetTextDelegate(string s);
        public void OnSetText(string s) { this.Text = s; }

        // delegate dan method yang akan diassign ke delegate
        public delegate string GetTextDelegate();
        public string OnGetText() { return "This Is Text From Form 1"; }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.Show();
        }

    }
}

Code Form2.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        // mendelegasikan delegate yang sudah dicreate dari Form1
        Form1.SetTextDelegate setText =
                 new Form1.SetTextDelegate((Form1.ActiveForm as Form1).OnSetText);
        Form1.GetTextDelegate getText =
                 new Form1.GetTextDelegate((Form1.ActiveForm as Form1).OnGetText);

        private void button1_Click(object sender, EventArgs e)
        {
            // mengakses variable  delegate yang sudah dipersiapkan.
            setText("This Text is Set From Form 2");
            this.Text = getText();
        }
    }
}

sedangkan untuk VB.NET, karena defaultnya semua form ada instance staticnya, untuk mengakses method pada Form1 dari Form2 dapat dilakukan dengan lebih mudah, yaitu dengan memanggil static instance defaultnya, seperti yang ditunjukkan pada potongan code di bawah ini

Potongan Code Form2

Me.Text = Form1.GetText()
Form1.SetText(“Hello Form1 Set From Form2”)

Ok, Semoga Bermanfaat

Rgds
Adi

Mengakses Method Suatu Form dari Form lain

langsung saja, misalkan ada sebuah aplikasi dengan rancangan form seperti berikut ini:

Form1

image

Form2

image

pada rancangan di atas, Form1 bertindak sebagai sebuah MDIForm, sedangkan Form2 adalah Child Form dari Form1.

untuk agar Form2 sebagai Form Child dari Form1 bisa mengakses method yang disediakan di Form1, method dari Form1 tersebut harus dimarked sebagai public method. dan cara aksesnya dapat dilihat pada source code di bawah ini (C#).

Source Code Program.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Source Code Form1.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // method dengan access public pada Form1
        public string GetText()
        {
            return "Hello Get From Form1";
        }

        // method dengan access public pada Form1
        public void SetText(string s)
        {
            this.Text = s;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.MdiParent = this;
            form.Show();
        }
    }
}

Source Code Form2

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // mengakses method public dari Form1
            this.Text = (Form1.ActiveForm as Form1).GetText();
            (Form1.ActiveForm as Form1).SetText("Hello Form1 Set From Form2");
        }
    }
}

sedangkan untuk VB.NET, karena defaultnya semua form ada instance staticnya, untuk mengakses method pada Form1 dari Form2 dapat dilakukan dengan lebih mudah, yaitu dengan memanggil static instance defaultnya, seperti yang ditunjukkan pada potongan code di bawah ini

Potongan Code Form2

Me.Text = Form1.GetText()
Form1.SetText(“Hello Form1 Set From Form2”)

Ok, Semoga Bermanfaat

Rgds
Adi

Sabtu, 16 Oktober 2010

Aplikasi Sederhana Count Down Timer

berikut ini aplikasi sederhana untuk count down. bisa digunakan untuk melakukan count down untuk selang waktu tertentu.

bisa didownload exe nya di link berikut ini

http://rapidshare.com/files/425356509/Count_Down_Timer.exe

aplikasi ini membutuhkan .NET Framework 4.0.

bentuk screen shot aplikasi adalah sebagai berikut:

image

untuk menggunakan aplikasi ini, gunakan tombol2 pada keyboard:

1. tombol Up Key – untuk menambah waktu count down

2. tombol Down Key – untuk mengurangi waktu count down

3. tombol Enter – untuk memulai proses count down

4. tombol Esc – untuk menghentikan proses count down

5. tombol Del – untuk reset timer count down

6 Alt + F4 – menutup aplikasi

 

dan berikut ini source code aplikasi dalam C# dan VB:

C#

using System;
using System.Drawing;
using System.Media;
using System.Windows.Forms;

namespace Count_Down_Timer
{
    public partial class FrmCountDown : Form
    {

        double lama;
        bool play;
        DateTime selesai;
        DateTime mulai;
        System.Timers.Timer timer = new System.Timers.Timer();
        System.Timers.Timer timer2 = new System.Timers.Timer();

        public FrmCountDown()
        {
            InitializeComponent();
            lama = 0;
            this.TopMost = true;
            this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
            this.Top = 0;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            timer2.Elapsed += new System.Timers.ElapsedEventHandler(timer2_Elapsed);
        }

        void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            this.lblTimer.Visible = !this.lblTimer.Visible;
        }

        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (selesai == mulai)
            {
                SystemSounds.Beep.Play();
                timer2.Start();
                play = false;
                timer.Stop();
            }
            else
            {
                selesai = selesai.AddMilliseconds(-100);
                TimeSpan selisih = selesai - mulai;
                if (selisih.Minutes < 5) this.lblTimer.ForeColor = Color.Red;
                this.lblTimer.Text = string.Format("{0}:{1}.{2}",
                    selisih.Minutes.ToString("00"),
                    selisih.Seconds.ToString("00"),
                    (selisih.Milliseconds / 100).ToString("0"));
            }
        }

        private void FrmCountDown_KeyDown(object sender, KeyEventArgs e)
        {
            if (play && e.KeyCode == Keys.Escape)
            {
                play = false;
                timer.Stop();
                lama = 0;
            }
            else if (!play && e.KeyCode == Keys.Up)
            {
                if (lama < 60) lama += 1;
                this.lblTimer.Text = string.Format("{0}:00.0", lama.ToString("00"));
            }
            else if (!play && e.KeyCode == Keys.Down)
            {
                if (lama > 0) lama -= 1;
                this.lblTimer.Text = string.Format("{0}:00.0", lama.ToString("00"));
            }
            else if (!play && e.KeyCode == Keys.Delete)
            {
                timer2.Stop();
                this.lblTimer.Visible = true;
                this.lblTimer.Text = "00:00.0";
                lama = 0;
                this.lblTimer.ForeColor = Color.Blue;
            }
            else if (e.KeyCode == Keys.Enter)
            {
                mulai = DateTime.Now;
                selesai = mulai.AddMinutes(lama);
                play = true;
                timer.Start();
            }
        }

    }
}

 

VB.NET

Public Class FrmCountDown

    Private lama As Double
    Private play As Boolean
    Private selesai As DateTime
    Private mulai As DateTime
    Private timer As New System.Timers.Timer()
    Private timer2 As New System.Timers.Timer()
   
    Public Sub New()
        InitializeComponent()
        lama = 0
        Me.TopMost = True
        Me.Left = Screen.PrimaryScreen.WorkingArea.Width - Me.Width
        Me.Top = 0
        AddHandler timer.Elapsed,
            Sub()
                If selesai = mulai Then
                    Media.SystemSounds.Beep.Play()
                    timer2.Start()
                    play = False
                    timer.Stop()
                Else
                    selesai = selesai.AddMilliseconds(-100)
                    Dim selisih As TimeSpan = selesai - mulai
                    If (selisih.Minutes < 5) Then Me.lblTimer.ForeColor = Color.Red
                    Me.Invoke(
                        Sub()
                            Me.lblTimer.Text = String.Format("{0}:{1}.{2}",
                                                 selisih.Minutes.ToString("00"),
                                                 selisih.Seconds.ToString("00"),
                                                 (selisih.Milliseconds / 100).ToString("0"))
                        End Sub, New Object() {})
                End If
            End Sub
        AddHandler timer2.Elapsed,
            Sub()
                Me.lblTimer.Visible = Not Me.lblTimer.Visible
            End Sub
    End Sub

    Private Sub FrmCountDown_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If play AndAlso e.KeyCode = Keys.Escape Then
            play = False
            timer.Stop()
            lama = 0
        ElseIf Not play AndAlso e.KeyCode = Keys.Up Then
            If lama < 60 Then lama += 1
            Me.lblTimer.Text = String.Format("{0}:00.0", lama.ToString("00"))
        ElseIf Not play AndAlso e.KeyCode = Keys.Down Then
            If lama > 0 Then lama -= 1
            Me.lblTimer.Text = String.Format("{0}:00.0", lama.ToString("00"))
        ElseIf Not play AndAlso e.KeyCode = Keys.Delete Then
            timer2.Stop()
            Me.lblTimer.Visible = True
            lama = 0
            Me.lblTimer.Text = "00:00.0"
            Me.lblTimer.ForeColor = Color.Blue
        ElseIf e.KeyCode = Keys.Enter Then
            mulai = DateTime.Now
            selesai = mulai.AddMinutes(lama)
            play = True
            timer.Start()
        End If
    End Sub

End Class

 

anda dapat mengembangkan aplikasi ini lebih lanjut lagi dan semoga bermanfaat,

 

Rgds
Adi

Mudahnya Membuat Code Snippet di VS 2010

kadang kala, kita sering dilibatkan dengan proses penulisan code yang sama secara berulang-ulang. untuk menghindari atau setidaknya mengurangi proses berulang tersebut, anda bisa memanfaatkan fasilitas snippet yang disediakan oleh Visual Studio (VS). snippet sesungguhnya adalah sebuah file xml dengan akhiran .snippet yang isinya adalah format struktur xml pembentuk snippet itu sendiri. dengan menggunakan snippet, kita bisa menggunakan shortcut untuk menghasilkan code-code yang perlu diketik berulang-ulang tersebut.

pada VS 2010, sudah disediakan sebuah extensions untuk memudahkan proses pembuatan snippet ini, anda cukup mendownload dan memasangnya ke dalam VS anda, seperti yang ditunjukkan oleh gambar-gambar berikut ini:

image

buka extension manager dari menu tools > extension manager

kemudian cari Snippet Designer

image

kemudian restart VS anda, setelah itu anda sudah bisa menggunakan snippet designer ini untuk membuat sebuah code snippet dengan mudah, seperti yang ditunjukkan oleh gambar-gambar berikut ini:

pilih / blok code program yang akan dijadikan code snippet. klik kanan pada code yang diblok tersebut, kemudian klik kanan, trus pilih export as snippet

image

image

ada beberapa properties yang bisa diisi, antara lain: shortcut yang merupakan key yang akan digunakan nantinya untuk menggunakan code snippet ini. Imports yang digunakan untuk mengimport namespace yang dibutuhkan. References yang digunakan untuk mengikutkan library file yang dibutuhkan.

dan langkah terakhir, simpan code snippet ini dengan akhiran .snippet

dan untuk menggunakannya, bisa dilakukan dengan:

ketik shortcut kemudian tekan tab, dalam contoh ini:

msge + <tab>

atau

ketik shortcut? kemudian tab + tab untuk melihat list code snippet yang ada, dalam contoh ini:

msge? + <tab> + <tab>

image

Nb. Teknik yang sama bisa digunakan untuk C# jg.

ok, semoga bermanfaat.

Rgds
Adi

Minggu, 10 Oktober 2010

Mengakses Method Form MDI dari Form Lain

Pada VB.NET, untuk mengakses kontrol atau method yang ada disebuah form lain, dapat dilakukan dengan mudah, karena sudah disediakannya static class dari tiap form yang bersangkutan. namun, hal ini tidak kita jumpai ketika kita bekerja dengan memanfaatkan bahasa C#. namun hal ini bukan berarti kita tidak bisa mengakses kontrol atau method dari form lain ketika bekerja dengan bahasa C#, tapi  dengan sedikit usaha, kontrol atau method tersebut tetap bisa kita akses jg dengan menggunakan bahasa C#. berikut ini contohnya:

image

image

Form1 adalah sebuah MDI Form, memiliki MenuStrip yang digunakan untuk memanggil object dari Form2. serta memiliki StatusStrip dengan kontrol ProgressBar di dalamnya. serta sebuah kontrol Timer.

image

Form2 adalah form yang akan difungsikan sebagai child form bagi Form1.

berikut ini code dari Form1:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var form = new Form2();
            form.MdiParent = this;
            form.Show();
        }

        int min, max;

        // method dgn akses public agar bisa dipanggil dari luar
        public void RunProgressStatusBar(int min, int max)
        {
            this.min = min;
            this.max = max;
            this.timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (min <= max)
            {
                this.lblAngka.Text = min.ToString();
                this.pBar.Value = min++;
            }
            else
                this.timer1.Stop();
        }
    }
}

 

dan, berikut ini code dari Form2:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int min = Convert.ToInt32(this.textBox1.Text);
            int max = Convert.ToInt32(this.textBox2.Text);
            // memanggil method RunProgressStatusBar kepunyaan MDI dari Child Form
            (Form1.ActiveForm as Form1).RunProgressStatusBar(min, max);
        }
    }
}

Rgds
Adi

Jumat, 08 Oktober 2010

Cek Status Tombol CapsLock, NumLock dan ScrollLock

pada VB.NET untuk melakukan pengecekan apakah tombol CapsLock, Numlock dan ScrollLock dalam posisi On atau Off bisa dilakukan dengan mudah dengan memanfaatkan namespace My yang sudah disediakan.

berikut ini contoh pengecekan tersebut dalam VB.NET:

Module Module1
    Sub Main()
        Console.WriteLine("CapsLock Is ON: {0}", My.Computer.Keyboard.CapsLock)
        Console.WriteLine("NumLock Is ON: {0}", My.Computer.Keyboard.NumLock)
        Console.WriteLine("ScrollLock Is ON: {0}", My.Computer.Keyboard.ScrollLock)
    End Sub
End Module

dalam C#, karena tidak disediakan, kita bisa menggunakan beberapa pendekatan yang berbeda untuk melakukan hal yang sama.

yang berikut ini bisa digunakan untuk console app dan win app dalam c#:

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        // an unmanaged function that retrieves the states of each key
        [DllImport("user32.dll",
            CharSet = CharSet.Auto,
            ExactSpelling = true,
            CallingConvention = CallingConvention.Winapi)]
        public static extern short GetKeyState(int keyCode);

        static void Main(string[] args)
        {
            // get the state and store it as bool
            bool capsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
            bool numLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
            bool scrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;
            // show the status
            Console.WriteLine("CapsLock Is ON: {0}", capsLock);
            Console.WriteLine("NumLock Is ON: {0}", numLock);
            Console.WriteLine("ScrollLock Is ON: {0}", scrollLock);

            // managed code
            bool cekCapsLock = Console.CapsLock;
            bool cekNumLock = Console.NumberLock;
            Console.WriteLine("CapsLock Is ON: {0}", cekCapsLock);
            Console.WriteLine("NumLock Is ON: {0}", cekNumLock);
        }
    }
}

mulai dari .NET Framework versi 2.0, selain menggunakan cara di atas, bisa jg menggunakan class Control.IsKeyLocked seperti yang ditunjukkan pada code berikut ini:

Capslock

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            this.lblCapsLock.Text = "CAPS LOCK: " + Control.IsKeyLocked(Keys.CapsLock);
            this.lblNumLock.Text = "NUM LOCK: " + Control.IsKeyLocked(Keys.NumLock);
            this.lblScrollLock.Text = "SCROLL LOCK: " + Control.IsKeyLocked(Keys.Scroll);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.lblCapsLock.Text = "CAPS LOCK: " + Control.IsKeyLocked(Keys.CapsLock);
            this.lblNumLock.Text = "NUM LOCK: " + Control.IsKeyLocked(Keys.NumLock);
            this.lblScrollLock.Text = "SCROLL LOCK: " + Control.IsKeyLocked(Keys.Scroll);
        }
    }
}

Nb. teknik pengecekan seperti yang dilakukan oleh C# juga bisa diterapkan dengan sedikit penyesuaian penulisan code pada code di VB.NET

Rgds
Adi

Senin, 04 Oktober 2010

Me

I, Me and MySelf.

Minggu, 03 Oktober 2010

Ternyata, Konversi String Menjadi Integer Tidak Mudah ;-)

Pertama, mari kita lihat dulu versi dalam program C# berikut ini:

using System;
using System.Globalization;

namespace CS_Konversi_Ke_Integer
{
class Program
{
static void Main(string[] args)
{
// definisi variable int
int angka = 1250;
// konversi menjadi string dengan
// format pemisah ribuan

string s = angka.ToString("#,##0");
Console.WriteLine(
"int diconvert menjadi string => {0}", s);
// tampilkan
// konversi kembali menjadi int
// angka = Convert.ToInt32(s);
// ternyata membangkitkan exception –
// Input String was not in a correct format

// supaya tidak exception, ganti dengan
// int.Parse –>
// jika yakin konversi akan selalu benar

// angka = int.Parse(s,
NumberStyles.AllowThousands,
CultureInfo.GetCultureInfo("en-US"));

// atau
// int.TryParse –>
// jika tidak yakin konversi akan selalu benar

if(!int.TryParse(s,
NumberStyles.AllowThousands,
CultureInfo.GetCultureInfo("en-US"),
out angka))
Console.WriteLine("Konversi Gagal ...");
// tampilkan
Console.WriteLine(
"string diconvert menjadi int => {0}", angka);
Console.ReadKey();
}
}
}


kedua, mari kita lihat versi VB.NET nya:



Imports System.Globalization

Module Module1
Sub Main()
' definisi variable integer
Dim angka As Integer = 1250
' konversi menjadi string dengan format pemisah ribuan
Dim s As String = angka.ToString("#,##0")
' tampilkan
Console.WriteLine( _
"int diconvert menjadi string => {0}", s)
' konversi kembali menjadi integer
' angka = Convert.ToInt32(s)
' membangkitkan exception -
' Input String was not in a correct format

' supaya tidak exception, ganti dengan
' Integer.Parse –>
' jika yakin konversi akan selalu benar

angka = Integer.Parse(s, _
NumberStyles.AllowThousands, _
CultureInfo.GetCultureInfo("en-US"))
' atau
' Integer.TryParse –>
' jika tidak yakin konversi akan selalu benar

If Not Integer.TryParse(s, _
NumberStyles.AllowThousands, _
CultureInfo.GetCultureInfo("en-US"), angka) Then
Console.WriteLine("Konversi Gagal ...")
End If
' tapi bisa disederhanakan dengan memanggil
' fungsi CInt seperti berikut ini:

angka = CInt(s)
' tampilkan
Console.WriteLine( _
"string diconvert menjadi int => {0}", angka)
Console.ReadKey()
End Sub
End Module


output dari program di atas adalah:



Konversi string to int


VB.NET memberikan kemudahan kepada programmer dalam mengerjakan coding tasknya ^^. tentunya anda tetap bisa menggunakan cara advanced seperti yang digunakan oleh C#.



Semoa Bermanfaat




Rgds


Adi