your programing

C# WPF의 콤보 상자에서 선택한 값 가져오기

lovepro 2023. 5. 22. 22:52
반응형

C# WPF의 콤보 상자에서 선택한 값 가져오기

Windows 양식 대신 WPF 양식을 사용하기 시작했습니다.Windows 양식을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

ComboBox.SelectedValue.toString();

그리고 이것은 잘 될 것입니다.

WPF에서 어떻게 해야 합니까?그것은 선택권이 없는 것 같습니다.

기존 WF 형태와 비교하여 약간 이상한 방법을 알아냈습니다.

ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();

음.. 더 간단한 해결책을 찾았어요

String s = comboBox1.Text;

이렇게 하면 선택한 값을 문자열로 가져옵니다.

내 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();

XAML 파일에서 ComboBox의 이름을 설정했는지 확인합니다.

<ComboBox Height="23" Name="comboBox" />

코드에서 다음을 사용하여 선택한 항목에 액세스할 수 있습니다.SelectedItem속성:

MessageBox.Show(comboBox.SelectedItem.ToString());

ComboBox에 바인딩하는 내용에 따라 다릅니다.MyObject라는 개체를 바인딩하고 Name이라는 속성이 있는 경우 다음 작업을 수행합니다.

MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;

다음은 어떻습니까?

string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();

콤보 상자의 변형으로SelectionChanged이벤트 처리기:

private void ComboBoxName_SelectionChanged(object send ...
{
    string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}

비슷한 문제가 있었고 이 스레드에서 제안된 여러 솔루션을 시도했지만 ComboBox 항목이 실제로 업데이트되어 새로운 선택 항목이 표시되기 전에 SelectionChanged Event가 실행되고 있음을 발견했습니다(즉, 변경이 발생하기 전에 항상 콤보 상자의 내용을 제공함).

이를 극복하기 위해서는 콤보 상자에서 직접 값을 로드하려고 하기보다는 이벤트 핸들러에 자동으로 전달되는 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>

C#:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string chosenValue = e.AddedItems[0].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"/>

이는 주로 상자를 채우는 방법에 따라 달라집니다.a를 부착하여 수행하는 경우DataTable(또는 다른 컬렉션) 에ItemsSource당신은 a를 첨부하는 것을 찾을 수 있습니다.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 선택 변경 이벤트 생성 및 항목 설정WPF 설계의 소스="{Binding}":

코드:

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string ob = ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
    MessageBox.Show(ob);
}
private void usuarioBox_TextChanged(object sender, EventArgs e)
{
    string textComboBox = usuarioBox.Text;
}
MsgBox(cmbCut.SelectedValue().ToString())

C#에서 ComboBox의 선택된 인덱스 값을 가져오려면 다음을 사용합니다.

Combobox.SelectedValue

같은 원리입니다.

선택됨을 사용할 수 있습니다.색인화하고 ComboBox를 사용합니다.항목[선택됨]Index).ToString().또는 콤보박스만.선택된필요한 모든 유형으로 아이템을 만들고 주조합니다 :)

실제로 다음과 같은 방법으로도 할 수 있습니다.

이 ComboBox 이름같가정다니합고다과다라고 합니다.comboBoxA그러면 다음과 같이 값을 얻을 수 있습니다.

string combo = comboBoxA.SelectedValue.ToString();

질문하신 지 5년이 지났으니 이제 지원이 된 것 같습니다.

다음과 같이 적으십시오.

String CmbTitle = (cmb.SelectedItem as ComboBoxItem).Content.ToString()

만약 당신이 그 값을 얻고 그것을 검증하고 싶다면 당신은 다음과 같은 것을 할 수 있습니다.

string index = ComboBoxDB.Text;
        if (index.Equals(""))
        {                
            MessageBox.Show("your message");
        }
        else
        {
            openFileDialog1.ShowDialog();
            string file = openFileDialog1.FileName;
            reader = new StreamReader(File.OpenRead(file));
        }
        // -----------------------------------------------------------------

        private void onSelectionChanged(object sender, 
                                        SelectionChangedEventArgs e)
        {
            String result = ((ComboBox)sender).SelectedItem.ToString();
            // do something with result
        }

        // -----------------------------------------------------------------

저는 이것이 유용하다고 생각했습니다.누군가가 필요로 할 경우를 대비해서 여기에 두고 갑니다.

값을 가져오는 방법

(comboBox1.SelectedItem as dynamic).Value

텍스트 가져오기

(comboBox1.SelectedItem as dynamic).Text
<ComboBox x:Name="TestComboBox" SelectionChanged="TestComboBox_SelectionChanged" Padding="2">
    <ComboBoxItem>Item 1</ComboBoxItem>
    <ComboBoxItem>Item 2</ComboBoxItem>
</ComboBox>

방법 1

string content = (((sender as ComboBox).SelectedValue) as ComboBoxItem).Content.ToString();

방법 2

string content = (string)((ComboBoxItem)((ComboBox)sender).SelectedValue).Content;

속을통해값추수있다니습출할을성▁▁the▁through▁the▁values다▁you니▁extract를 통해 값을 추출할 수 .SelectedValue다음과 같이:

combo.SelectedValue.ToString();

저는 이 코드를 사용합니다. 그리고 그것은 저에게 효과가 있습니다.

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
}

제게 도움이 됩니다.

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

반응형