ComboBox и SelectedIndex = -1

Dimon.NET
Дата: 04.05.2006 08:15:29
Есть мой UserControl (на нем ComboBox):
public class TestControl : System.Windows.Forms.UserControl
	{
		private System.Windows.Forms.ComboBox comboBox;
		private System.ComponentModel.Container components = null;

		public TestControl()
		{
			InitializeComponent();
 
                         // !!! хочу установить значение по умолчанию: пустое
			this.comboBox.SelectedIndex = -1;	
		}

		public object DataSource
		{
			get { return comboBox.DataSource; }
			set { comboBox.DataSource = value; }
		}

		/// <summary> 
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Component Designer generated code
		/// <summary> 
		/// Required method for Designer support - do not modify 
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.comboBox = new System.Windows.Forms.ComboBox();
			this.SuspendLayout();
			// 
			// comboBox
			// 
			this.comboBox.Location = new System.Drawing.Point(0, 0);
			this.comboBox.Name = "comboBox";
			this.comboBox.Size = new System.Drawing.Size(312, 21);
			this.comboBox.TabIndex = 0;
			this.comboBox.Text = "comboBox";
			// 
			// TestControl
			// 
			this.Controls.Add(this.comboBox);
			this.Name = "TestControl";
			this.Size = new System.Drawing.Size(312, 24);
			this.Load += new System.EventHandler(this.TestControl_Load);
			this.ResumeLayout(false);

		}
		#endregion

		private void TestControl_Load(object sender, System.EventArgs e)
		{
                         // !!! хочу установить значение по умолчанию: пустое  
			this.comboBox.SelectedIndex = -1;		
		}
	}

Кидаю его на форму,

в конструкторе формы пишу:

testControl1.DataSource = myTestArrayList;

Так вот проблема в том, что я хочу чтобы при загрузке формы ComboBox показывал пустое значение, но он никак не хочет (см. !!!)
Скажите, что я не так делаю?
Sv219
Дата: 04.05.2006 09:05:10
а если это вообще убрать?
this.comboBox.SelectedIndex = -1;
помоему и будет пустое... если я ничего не путаю...
можно еще в myTestArrayList добавить пустое значение и его отображать, но это не красиво
lustig
Дата: 04.05.2006 09:18:47
Сколько я в свое время с этим SelectedIndex = -1 протрахался, ни в сказке сказать... Сам вопрос задал, вразумительно никто не ответил. Думал фича, но перечитывал совсем по другому вопросу форум и нашел вот эту Ссылку. Оказалось, как всегда, баг. Не знаю, что там за тестеры в мелкософте, как можно было такое не отловить. Я с этим столкнулся в первую неделю освоения шарпа.

Sv219
можно еще в myTestArrayList добавить пустое значение и его отображать, но это не красиво


Это не просто некрасиво, а офигеть как некрасиво. Мне тоже такой рецепт предлагали.
Worobjoff
Дата: 04.05.2006 09:41:23
А так:
comboBox1.SelectedItem = null;
Не устраивает?
lustig
Дата: 04.05.2006 10:07:32
Worobjoff

А так:
comboBox1.SelectedItem = null;
Не устраивает?


А ты попробуй. Я не поленился, проверил... Теже Фаберже, только вид сбоку!
Worobjoff
Дата: 04.05.2006 10:11:46
Студия какя?
Во втрой это работает.

Правда SelectedIndex по-прежнему не работает.
lustig
Дата: 04.05.2006 11:49:51
Worobjoff
Студия какя?

2003(FW1.1)
Dimon.NET
Дата: 04.05.2006 12:05:52
Попробывал в Load формы написать такое:
testControl1.comboBox.SelectedIndex = -1;
Значение стало пустым!!!
Но это некрасиво получается! Инициализировать значение моего контрола на Load'e формы.
Lenutza
Дата: 04.05.2006 13:46:30
pochemu ty ne mozhesh' dobavit' pustuju stroku v collection of combobox,esli danye beresh' is datasource,to mozhno ispol'zovat' function:

private void AddNewRow(DataTable dt,string DisplayMember,string ValueMember)
{

DataRow drEmpty = dt.NewRow() ;
drEmpty[DisplayMember] ="";
drEmpty[ValueMember]=-1;

dt.Rows.Add(drEmpty);
dt.AcceptChanges();
}
Dimon.NET
Дата: 04.05.2006 14:22:59
Lenutza
pochemu ty ne mozhesh' dobavit' pustuju stroku v collection of combobox,esli danye beresh' is datasource,to mozhno ispol'zovat' function:

private void AddNewRow(DataTable dt,string DisplayMember,string ValueMember)
{

DataRow drEmpty = dt.NewRow() ;
drEmpty[DisplayMember] ="";
drEmpty[ValueMember]=-1;

dt.Rows.Add(drEmpty);
dt.AcceptChanges();
}


Конечно, это вариант, но, я думаю, самый наихудший и некрасивый, т.к.
в данном случае DataSource - это мой сложный объект данных, и добавление туда "так называемого пустого элемента" повлечет за собой переделку (отладку) других частей системы, что крайне нежелательно.
Мне бы хотелось узнать, какие еще есть варианты решения данной проблемы.