Когда закрываю форму легко получаю значение SalectedValue ComboBox но перед ShowDialog формы если ставлю SelectedValue для ComboBox, то ComboBox не ставит его. ComboBox внутри TableLayoutPanel вместе с Label. те set SalectedValue не работает и Items = 0, но DataSource в конструкторе установлен
form.EnabledLabeledCheckComboxBox.CheckComboBox.SelectedValue = true;
form.ShowDialog();
MessageBox.Show(form.EnabledLabeledCheckComboxBox.CheckComboBox.SelectedValue.ToString()); // здесь то что я выберу
//////////////////////////////////////////////////////////////////
public class BoolKeyStringValue : BaseVM {
#region Key
private bool key;
public bool Key {
get => this.key;
set {
this.key = value;
OnPropertyChanged("Key");
}
}
#endregion
#region Value
private string value;
public string Value {
get => this.value;
set {
this.value = value;
OnPropertyChanged("Value");
}
}
#endregion
public BoolKeyStringValue(bool key, string value) {
this.Key = key;
this.Value = value;
}
}
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Test {
public class LabeledCheckComboBox : TableLayoutPanel {
#region Properties
#region Label
private Label label;
public Label Label {
get => this.label;
set => this.label = value;
}
#endregion
#region CheckComboBox
private ComboBox checkComboBox;
public ComboBox CheckComboBox {
get => this.checkComboBox;
set => this.checkComboBox = value;
}
#endregion
#region Bools
private List<BoolKeyStringValue> bools;
public List<BoolKeyStringValue> Bools {
get => this.bools;
set => this.bools = value;
}
#endregion
#endregion
#region Constructors
public LabeledCheckComboBox() {
#region Label
this.Label = new Label();
this.Label.Dock = DockStyle.Bottom;
this.Label.Margin = new Padding(0);
#endregion
#region Bools
this.Bools = new List<BoolKeyStringValue>();
this.Bools.Add(new BoolKeyStringValue(false, "No"));
this.Bools.Add(new BoolKeyStringValue(true, "Yes"));
#endregion
#region Init
this.Dock = DockStyle.Top;
this.Margin = new Padding(0, 1, 0, 0);
this.RowCount = 2;
this.ColumnCount = 1;
this.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
this.Controls.Add(this.Label, 0, 0);
this.CheckComboBox = new ComboBox();
this.CheckComboBox.Items.AddRange(this.Bools.ToArray());
this.CheckComboBox.DataSource = this.Bools;
this.CheckComboBox.DisplayMember = "Value";
this.CheckComboBox.ValueMember = "Key";
this.CheckComboBox.Dock = DockStyle.Top;
this.CheckComboBox.Margin = new Padding(3, 0, 0, 0);
this.CheckComboBox.FlatStyle = FlatStyle.Flat;
this.CheckComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
this.CheckComboBox.Font = new Font("Microsoft Sans Serif", 10, FontStyle.Regular);
this.Controls.Add(this.CheckComboBox, 0, 1);
#endregion
}
#endregion
}
}
Читайте документацию (можно прямо в Студии навести мышку на свойство и всплывет подсказка с описанием).
SelectedValue property:
Gets or sets the value of the member property specified by the ValueMember property.
Выделил важное.
Вам, вероятно, следует использовать SelectedItem:
Gets or sets currently selected item in the ComboBox.
Вот такой класс будет элементом в коллекции комбобокса
public class ComboBoxElement
{
public int Id { get; set; }
public string Name { get; set; }
}
Вот пример на поиграться. Кстати если напрямую, как вы это делаете назначать SelectedValue значение, то выбранный элемент становится равным null
.
public partial class MainView : Form
{
private BindingSource _bsCombobox = new BindingSource();
public MainView()
{
InitializeComponent();
SetBindings();
GetData();
}
private void SetBindings()
{
_bsCombobox.DataSource = typeof(List<ComboBoxElement>);
_comboBoxAnimals.DataSource = _bsCombobox;
_comboBoxAnimals.DisplayMember = "Name";
_comboBoxAnimals.ValueMember = "Id";
}
private void GetData()
{
_bsCombobox.DataSource = new List<ComboBoxElement>
{
new ComboBoxElement { Id = 1, Name = "Кошка" },
new ComboBoxElement { Id = 2, Name = "Собака" },
new ComboBoxElement { Id = 3, Name = "Корова" },
};
}
private void _buttonShow_Click(object sender, EventArgs e)
{
//MessageBox.Show((_bsCombobox.Current as ComboBoxElement).Name);
//или так
MessageBox.Show((_comboBoxAnimals.SelectedItem as ComboBoxElement).Name);
}
private void _buttonSelectCow_Click(object sender, EventArgs e)
{
//_comboBoxAnimals.SelectedIndex = _comboBoxAnimals.FindString("Корова");
//или так
var element = _bsCombobox.OfType<ComboBoxElement>()
.FirstOrDefault(ce => ce.Name.Equals("Корова"));
_bsCombobox.Position = _bsCombobox.IndexOf(element);
}
private void _buttonSelectDog_Click(object sender, EventArgs e)
{
////выбираем собаку
//_comboBoxAnimals.SelectedIndex = _comboBoxAnimals.FindString("Собака");
////изменяем у нее Id, который у нас назначен как ValueMember и сначала =2
//_comboBoxAnimals.SelectedValue = 1000; //!!! это действие делает SelectedItem = null
////и здесь вылетает ошибка, хотя по-идее должно бы быть окошко с 1000
//MessageBox.Show(_comboBoxAnimals.SelectedValue.ToString());
//потому лучше так
var element = _bsCombobox.OfType<ComboBoxElement>()
.FirstOrDefault(ce => ce.Name.Equals("Собака"));
element.Id = 1000;
_bsCombobox.Position = _bsCombobox.IndexOf(element);
MessageBox.Show(_comboBoxAnimals.SelectedValue.ToString());
}
}
Всем привет! Появилась задача из полученных данных перекинуть в таблицу и её отформатировать Есть такой вот код:
При нажатии на элемент listboxа открывается новая форма, но также это происходит(ложное срабатывание) после заполнение listboxа командой listBox4DataSource...
При создании нового скрипта юнити пишет "No MonoBehaivour scripts in the file, or their names do not match the file name"
После этого вопроса, сразу возник следующийЕсли в хеш-таблице ключ имеет несколько значений, то как их все сразу вывести?