본문 바로가기
.NET WPF

Silverlight 2 Controls Review - ListBox

by 태디 2008. 10. 3.
728x90

Listbox 은 항목을 리스트 형식으로 보여주는 컨트롤입니다. 기본적인 Xaml 디자인은 다음과 같습니다.

<ListBox x:Name="lstLation" />


Xaml에서 Data Binding 할 경우는 listBoxItem 태그를 사용합니다.

<ListBox x:Name="lstLation">

   <ListBoxItem Content="미국"></ListBoxItem>

   <ListBoxItem Content="영국"></ListBoxItem>

   <ListBoxItem Content="독일"></ListBoxItem>

   <ListBoxItem Content="프랑스"></ListBoxItem>

   <ListBoxItem Content="일본"></ListBoxItem>

   <ListBoxItem Content="네덜란드"></ListBoxItem>

   <ListBoxItem Content="대한민국"></ListBoxItem>

   <ListBoxItem Content="홍콩"></ListBoxItem>

   <ListBoxItem Content="스페인"></ListBoxItem>

   <ListBoxItem Content="페루"></ListBoxItem>

</ListBox>


사용자 삽입 이미지

C#에서 동적으로 항목(Item)을 추가, 삭제, 전체삭제 하는 방법은 아래코드와 같습니다.

// 추가(Add)

lstLation.Items.Add(txtAdd.Text);

 

// 삭제(Remove)

lstLation.Items.Remove("미국");  // 오브젝트명으로 삭제

lstLation.Items.RemoveAt(2);     // 항목의 인덱스번호로 삭제

 

// 전체삭제

lstLation.Items.Clear();


ListBox는 Xaml에서 데이터를 바인딩할 수 있고 C#에서도 동적으로 데이터 바인딩이 가능합니다. 또한 TextBox, TextBlack, ComboBox등 다른 컨트롤을 직접 바인딩 할 수도 있는 매우 사용범위가 큰 컨트롤입니다.

다음 아래데모는 데이터를 추가, 삭제, 전체삭제 할 수 있는 간단한 프로그램입니다.

사용자 삽입 이미지 사용자 삽입 이미지 사용자 삽입 이미지


사용자 삽입 이미지 사용자 삽입 이미지 사용자 삽입 이미지


사용자 삽입 이미지 사용자 삽입 이미지

Xaml Code

<UserControl x:Class="ControlTest4.Page"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Width="345" Height="265">

    <Grid x:Name="LayoutRoot" Background="White" Width="470" Height="311">

        <Grid.ColumnDefinitions>

               <ColumnDefinition Width="0.949*"/>

               <ColumnDefinition Width="0.051*"/>

        </Grid.ColumnDefinitions>

       

        <ListBox Margin="25,24,0,80" Width="155" HorizontalAlignment="Left"

                 x:Name="lstLation" />

       

        <TextBox Height="22" Margin="202,27,141,0"

                 VerticalAlignment="Top" Text=""

                 TextWrapping="Wrap" x:Name="txtAdd"

                 RenderTransformOrigin="2.136,-8.909"/>

       

        <!--추가-->

        <Button Margin="202,71,141,0" Content="추가" VerticalAlignment="Top"

               Height="22" x:Name="btnAdd" Click="btnAdd_Click"

                RenderTransformOrigin="0.582,0.25"/>

        <!--삭제-->

        <Button Margin="202,105,141,0" Content="삭제" VerticalAlignment="Top"

               Height="22" x:Name="btnRemove" Click="btnRemove_Click"

            RenderTransformOrigin="0.582,0.25"/>

        <!--전체삭제-->

        <Button Margin="202,137,141,152" Content="전체삭제" x:Name="btnClear"

                Click="btnClear_Click" RenderTransformOrigin="0.582,0.25"/>

    </Grid>

</UserControl>

 



C# Code

using System.Windows;

using System.Windows.Controls;

 

namespace ControlTest4

{

    public partial class Page : UserControl

    {

        public Page()

        {

            InitializeComponent();

        }

 

        private void btnAdd_Click(object sender, RoutedEventArgs e)

        {

            if (txtAdd.Text == "" || txtAdd.Text == null)

            {

                MessageBox.Show("새로운 항목을 입력해주세요.");

                return;

            }

 

            for (int i = 0; i < lstLation.Items.Count; i++)

            {

                if (lstLation.Items[i].ToString() == txtAdd.Text)

                {

                    MessageBox.Show("동일한 항목이 있습니다.");

                    return;

                }

            }

 

            // 추가(Add)

            lstLation.Items.Add(txtAdd.Text);

            txtAdd.Text = "";

        }

 

        private void btnRemove_Click(object sender, RoutedEventArgs e)

        {

            if (lstLation.Items.Count > 0)

            {

                // 삭제(Remove)

                int index = lstLation.SelectedIndex;

                lstLation.Items.RemoveAt(index);  // 오브젝트명으로 삭제 

            }

            else

            {

                MessageBox.Show("삭제할 항목이 없습니다.");

                return;

            }

        }

 

        private void btnClear_Click(object sender, RoutedEventArgs e)

        {

            if (lstLation.Items.Count < 0)

            {

                MessageBox.Show("삭제할 항목이 없습니다.");

                return;

            }

 

            // 전체삭제

            lstLation.Items.Clear();

        }

    }

}

 



btnAdd_Click 이벤트는 txtAdd.Text에 입력된 항목을 ListBox에 추가하는 이벤트 입니다. ListBox에 등록된 항목과 동일하면 등록할 수 없다는 메시지 박스를 출력하고 Return 을 수행하며 이벤트를 빠져나갑니다.

btnAdd_Click 이벤트는 등록된 항목이 있는지, 선택된 항목이 있는지를 검색하여 선택한 항목을 ListBox에서 삭제를 합니다. RemoveAt는 선택된 항목의 인덱스값을 받아서 삭제를 합니다.
btnClear_Click이벤트는 ListBox에 항목이 있는지 검색하고 항목이 없으면 메시지르 뿌리고 있으면 선택된 항목을 삭제합니다.




댓글