콤보박스 Text입력 란에 음식점 이름 입력 후 추가 누르면 콤보박스 리스트 item에 추가가 되고, 삭제를 누르면 해당 item이 리스트에서 삭제된다. 만약 리스트 item에 없는 음식점 이름을 삭제하면 삭제할 이름이 존재하지 않는다 라는 메시지박스가 뜬다.
삭제 시퀀스) 콤보박스 Text와 콤보박스 리스트에 등록된 item 간의 비교를 통해 중복 되면 삭제하고 중복이 되지 않으면 삭제할 이름이 존재하지 않는다 라는 메시지 박스를 띄우게 했다.
소스
<Window x:Class="WpfApplication4.MainWindow"
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:WpfApplication4"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label x:Name="label" Content="좋아하는 식당 리스트" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="43,47,0,0" Width="170"/>
<TextBox x:Name="txt_result" HorizontalAlignment="Left" Height="43" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="316" Margin="43,221,0,0" VerticalContentAlignment="Center"/>
<ComboBox x:Name="combo_restraunt" HorizontalAlignment="Left" VerticalAlignment="Top" Width="135" Margin="43,91,0,0" IsEditable="True" Height="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" SelectionChanged="combo_restraunt_SelectionChanged"/>
<Button x:Name="bt_add" Content="추가" Margin="305,91,137,198" Click="bt_add_Click"/>
<Button x:Name="bt_delete" Content="삭제" Margin="305,136,137,153" Click="bt_delete_Click"/>
</Grid>
</Window>
cs코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication4
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
txt_result.Text = "";
}
private void bt_add_Click(object sender, RoutedEventArgs e)
{
combo_restraunt.Items.Add(combo_restraunt.Text);
txt_result.Text = combo_restraunt.Text + " Added! ";
}
private void bt_delete_Click(object sender, RoutedEventArgs e)
{
//tmp를 통해 항목 삭제 시 삭제된 항목이름이 txt_result(텍스트박스)에 나타나지 않는 버그 해결.
//콤보박스에 이름입력 후 삭제 시 항목 이름이 나타나지만, 콤보박스 항목 selected 후 삭제 시 deleted! 만 나오고 이름은 안나옴.
string tmp = combo_restraunt.Text; // 콤보 박스 입력 문자열
//콤보박스의 삭제할 항목이 존재하지 않는경우 메시지박스.
int i = 0;
var count = combo_restraunt.Items.Count; // 콤보박스 아이템 총 갯수.
for (i = 0; i<count; i++) // 등록된 콤보박스 항목 수 만큼 검사해서 tmp와 동일한 문자열 존재 시 deleted 싸줌, 없으면 루프빠져나옴.
{
if (tmp == (string)combo_restraunt.Items[i]) // 중복 된 경우 // (string) 캐스팅 해야 경고창 안나옴.
{
combo_restraunt.Items.Remove(combo_restraunt.Text);
txt_result.Text = tmp + " deleted! ";
break;
}
}
if (i == count )// 중복이 안된 경우
{
MessageBox.Show("삭제할 이름이 존재하지 않습니다.");
}
}
private void combo_restraunt_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// try - catch 로 프로그램 종료 예방
try
{
ComboBox cb = sender as ComboBox;
txt_result.Text = "이번 주 모임장소는 : " + cb.SelectedItem.ToString();
/* 이렇게 하면 에러남. 캐스팅 지원 안됨.
ComboBoxItem restraunt = (ComboBoxItem)cb.SelectedItem;
txt_result.Text = "이번 주 모임장소는 : " + restraunt.Content.ToString();
*/
}
catch {
return;
}
}
}
}
참조
c# - How to get the number of items in a combobox? - Stack Overflow
1) combobox item's count: 콤보박스이름.Items.Count;
2) (string)콤보박스이름.Items[i] : 배열 표현 가능, 캐스팅을 통해 문자열 비교 가능(해당 문제에선 combo_restraunt이란 콤보박스의 Text와 비교하였다.)
wpf - 콤보 박스에 텍스트를 입력하는 방법? - IT 툴 넷 (pythonq.com)
콤보 상자 속성 - IsEditable = "true"
'C#(.Net)' 카테고리의 다른 글
wpf 바인딩 연습1 (0) | 2021.07.12 |
---|---|
데이터 바인딩 (0) | 2021.07.11 |
데이터바인딩 (0) | 2021.07.09 |
(WPF) 리스트박스에 항목을 표시하는 세가지 방법 (C#200제, p429) (0) | 2021.07.09 |
WPF) 3.스크롤바로 RGB 컬러조정(초보자를 위한 c# 200제, p426) (0) | 2021.07.09 |