Windowsフォームフォームの代わりにWPFフォームの使用を開始しました。 Windows Formsフォームでは、次のことができます。
ComboBox.SelectedValue.toString();
そして、これはうまくいくでしょう。
WPFでこれを行うにはどうすればよいですか?オプションがないようです。
古いWFフォームと比較して、少し奇妙な方法を見つけました。
ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();
まあ..私はより簡単な解決策を見つけました。
String s = comboBox1.Text;
このようにして、選択した値を文字列として取得します。
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();
これらはどうですか:
string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();
ComboBoxにバインドしたものによって異なります。 MyObjectというオブジェクトをバインドしていて、たとえばNameというプロパティが次のことを行っている場合:
MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;
ComboBox SelectionChanged
イベントハンドラーのバリアントとして:
private void ComboBoxName_SelectionChanged(object send ...
{
string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).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"/>
これは、ボックスの充填方法に大きく依存します。 DataTable
(または他のコレクション)をItemsSource
にアタッチすることにより行われる場合、XAMLのボックスにSelectionChanged
イベントハンドラーをアタッチし、これをコードで使用することがあります。 -便利な後ろ:
private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cbx = (ComboBox)sender;
string s = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex)).Row.ItemArray[0].ToString();
}
私はここで別の2つの答えを見ました-それは異なる部分を持っていました-1つはComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
を持っていましたが、これは似ていますが、ボックスをDataRowView
にキャストしません。 :((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
、.Items.GetItemAt(comboBox1.SelectedIndex)
の代わりに.SelectedItem
を使用しました。それはうまくいったかもしれませんが、私が決めたのは実際には上記で書いた2つの組み合わせであり、.SelectedItem
を避けた理由を覚えていません。ただし、このシナリオではうまくいかなかったはずです。
ボックスを動的に入力する場合、またはXAMLのドロップダウンにComboBoxItem
アイテムを直接入力する場合、これは私が使用するコードです。
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>
C#:
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;
}
C#でComboBoxの選択したインデックスの値を取得するには、次を使用します。
Combobox.SelectedValue
次のように書きます:
String CmbTitle = (cmb.SelectedItem as ComboBoxItem).Content.ToString()
実際には、次の方法でも実行できます。
ComboBox名がcomboBoxA
であるとします。次に、その値は次のように取得できます。
string combo = comboBoxA.SelectedValue.ToString();
あなたの質問は5歳であるため、現在サポートされていると思います。
それは同じ原理です。
SelectedIndexとComboBox.Items [SelectedIndex] .ToString()を使用できます。または、単にComboBox.SelectedItemを使用して、必要な任意の型にキャストします:)
値を取得して検証したい場合は、次のようなことができます
string index = ComboBoxDB.Text;
if (index.Equals(""))
{
MessageBox.Show("your message");
}
else
{
openFileDialog1.ShowDialog();
string file = openFileDialog1.FileName;
reader = new StreamReader(File.OpenRead(file));
}
MsgBox(cmbCut.SelectedValue().ToString())