C # WPF의 콤보 상자에서 선택한 값 가져 오기
방금 Windows Forms 양식 대신 WPF 양식을 사용하기 시작했습니다. Windows Forms 양식에서 다음을 수행 할 수 있습니다.
ComboBox.SelectedValue.toString();
그리고 이것은 잘 작동합니다.
WPF에서 어떻게합니까? 옵션이없는 것 같습니다.
음 .. 더 간단한 해결책을 찾았습니다.
String s = comboBox1.Text;
이렇게하면 선택한 값을 문자열로 얻습니다.
이전 WF 형식과 비교하여 약간의 이상한 방법을 알아 냈습니다.
ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();
XAML 파일에서 ComboBox의 이름을 설정했는지 확인합니다.
<ComboBox Height="23" Name="comboBox" />
코드에서 SelectedItem
속성을 사용하여 선택한 항목에 액세스 할 수 있습니다 .
MessageBox.Show(comboBox.SelectedItem.ToString());
내 XAML은 다음과 같습니다.
<ComboBox Grid.Row="2" Grid.Column="1" Height="25" Width="200" SelectedIndex="0" Name="cmbDeviceDefinitionId">
<ComboBoxItem Content="United States" Name="US"></ComboBoxItem>
<ComboBoxItem Content="European Union" Name="EU"></ComboBoxItem>
<ComboBoxItem Content="Asia Pacific" Name="AP"></ComboBoxItem>
</ComboBox>
콘텐츠가 텍스트와 WPF 콤보 상자의 이름으로 표시됩니다. 선택한 항목의 이름을 얻으려면 다음 코드 줄을 따르십시오.
ComboBoxItem ComboItem = (ComboBoxItem)cmbDeviceDefinitionId.SelectedItem;
string name = ComboItem.Name;
WPF 콤보 상자의 선택한 텍스트를 가져 오려면 :
string name = cmbDeviceDefinitionId.SelectionBoxItem.ToString();
ComboBox에 바인딩 한 내용에 따라 다릅니다. MyObject라는 개체를 바인딩하고 Name이라는 속성이있는 경우 다음을 수행합니다.
MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;
이것들은 어떻습니까?
string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();
이 문제를 해결하는 것은 간단합니다. 내가 한 일은 XAML 코드에 "SelectedValuePath"를 추가하고 콤보 상자로 반환하려는 모델 속성에 바인딩하는 것뿐이었습니다.
<ComboBox SelectedValuePath="_Department"
DisplayMemberPath="_Department"
Height="23"
HorizontalAlignment="Left"
ItemsSource="{Binding}"
Margin="-58,1,0,5"
Name="_DepartmentComboBox"
VerticalAlignment="Center"
Width="268"/>
ComboBox SelectionChanged
이벤트 처리기 의 변형 :
private void ComboBoxName_SelectionChanged(object send ...
{
string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}
이것은 주로 상자를 채우는 방법에 따라 다릅니다. 에 DataTable
(또는 다른 컬렉션)을 ItemsSource
연결하여 수행하는 SelectionChanged
경우 XAML의 상자에 이벤트 처리기를 연결 한 다음 코드 숨김에서 유용하게 사용할 수 있습니다.
private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cbx = (ComboBox)sender;
string s = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex)).Row.ItemArray[0].ToString();
}
하나 있었다 - 나는의 다른 부분을 가지고 여기에이 개 다른 답변을보고 ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
비슷한 보이는,하지만에있는 상자를 캐스팅하지 않습니다 DataRowView
: 내가 할 필요가 발견, 뭔가 다른 ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
, 사용 .SelectedItem
대신에 .Items.GetItemAt(comboBox1.SelectedIndex)
. 그것은 효과가 있었을지도 모르지만 실제로 내가 위에서 쓴 두 가지의 조합이었고, .SelectedItem
이 시나리오에서 나를 위해 효과가 없었어야한다는 점을 제외하고는 내가 왜 피했는지 기억하지 못합니다 .
상자를 동적으로 채우거나 ComboBoxItem
XAML에서 드롭 다운의 항목을 직접 채우는 경우 다음 코드를 사용합니다.
private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cbx = (ComboBox)sender;
string val = String.Empty;
if (cbx.SelectedValue == null)
val = cbx.SelectionBoxItem.ToString();
else
val = cboParser(cbx.SelectedValue.ToString());
}
내가 가지고 있음을 볼 수 cboParser
있습니다. 의 출력이 SelectedValue
다음과 같기 때문 System.Windows.Controls.Control: Some Value
입니다.. 적어도 내 프로젝트에서는 그랬습니다. 그래서 당신은 그것을 파싱해야 Some Value
합니다.
private static string cboParser(string controlString)
{
if (controlString.Contains(':'))
{
controlString = controlString.Split(':')[1].TrimStart(' ');
}
return controlString;
}
그러나 이것이이 페이지에 많은 답변이있는 이유입니다. 상자를 채우는 방법과 값을 다시 얻을 수있는 방법에 따라 크게 달라집니다. 어떤 상황에서는 대답이 옳고 다른 상황에서는 틀릴 수 있습니다.
ComboBox SelectionChanged 이벤트를 만들고 WPF 디자인에서 ItemsSource = "{Binding}"을 설정합니다.
암호:
private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string ob = ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
MessageBox.Show(ob);
}
비슷한 문제가 있었고이 스레드에서 제안 된 여러 솔루션을 시도했지만 ComboBox 항목이 실제로 새 선택을 표시하기 위해 업데이트되기 전에 SelectionChanged 이벤트가 발생했음을 발견했습니다 (즉, 변경하기 전에 항상 콤보 상자의 내용을 제공했습니다 발생).
이를 극복하기 위해 콤보 상자에서 직접 값을로드하는 것보다 이벤트 핸들러에 자동으로 전달되는 e 매개 변수를 사용하는 것이 더 낫다는 것을 알았습니다.
XAML :
<Window.Resources>
<x:Array x:Key="Combo" Type="sys:String">
<sys:String>Item 1</sys:String>
<sys:String>Item 2</sys:String>
</x:Array>
</Window.Resources>
<Grid>
<ComboBox Name="myCombo" ItemsSource="{StaticResource Combo}" SelectionChanged="ComboBox_SelectionChanged" />
<TextBlock Name="MyTextBlock"></TextBlock>
</Grid>
씨#:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string chosenValue = e.AddedItems[0].ToString();
}
private void usuarioBox_TextChanged(object sender, EventArgs e)
{
string textComboBox = usuarioBox.Text;
}
MsgBox(cmbCut.SelectedValue().ToString())
To get the value of the ComboBox's selected index in C# use:
Combobox.SelectedValue
It's the same principle.
You can either use SelectedIndex and use ComboBox.Items[SelectedIndex].ToString(). Or just ComboBox.SelectedItem and cast it to any type you need :)
Actually you can do it the following way as well.
Suppose your ComboBox name is comboBoxA
. Then its value can be gotten as:
string combo = comboBoxA.SelectedValue.ToString();
I think it's now supported since your question is five years old.
Write it like this:
String CmbTitle = (cmb.SelectedItem as ComboBoxItem).Content.ToString()
if you want to get the value and validate it you can do something like this
string index = ComboBoxDB.Text;
if (index.Equals(""))
{
MessageBox.Show("your message");
}
else
{
openFileDialog1.ShowDialog();
string file = openFileDialog1.FileName;
reader = new StreamReader(File.OpenRead(file));
}
I use this code, and it works for me:
DataRowView typeItem = (DataRowView)myComboBox.SelectedItem;
string value = typeItem.Row[0].ToString();
XAML:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="19,123,0,0" Name="comboBox1" VerticalAlignment="Top" Width="33" ItemsSource="{Binding}" AllowDrop="True" AlternationCount="1">
<ComboBoxItem Content="1" Name="ComboBoxItem1" />
<ComboBoxItem Content="2" Name="ComboBoxItem2" />
<ComboBoxItem Content="3" Name="ComboBoxItem3" />
</ComboBox>
C#:
if (ComboBoxItem1.IsSelected)
{
// Your code
}
else if (ComboBoxItem2.IsSelected)
{
// Your code
}
else if(ComboBoxItem3.IsSelected)
{
// Your code
}
It works for me:
System.Data.DataRowView typeItem = (System.Data.DataRowView)ComboBoxName.SelectedItem;
string value = typeItem.DataView.ToTable("a").Rows[0][0].ToString();
참고URL : https://stackoverflow.com/questions/4351603/get-selected-value-from-combo-box-in-c-sharp-wpf
'Development Tip' 카테고리의 다른 글
로컬 네트워크의 다른 컴퓨터에서 webrick / rails에 액세스 (0) | 2020.12.09 |
---|---|
모든 원격 연결 허용, MySQL (0) | 2020.12.09 |
Java는 문자열의 SHA-1 다이제스트에 대한 16 진 표현을 계산합니다. (0) | 2020.12.09 |
iOS에서 짧은 소리 재생 (0) | 2020.12.09 |
Python 및 Flask를 사용하여 요청 변수 값을 얻는 방법 (0) | 2020.12.09 |