Во-первых, будьте осторожны с тем, где вы ставите фигурную скобку, чтобы убедиться, что код может быть скомпилирован.
public partial class Form1 : Form
{
string[] Brands = new string[10];
int brandNo;} //<- off-placed
Во-вторых, поскольку вы начинаете с создания массива в качестве своего DataSource (и не используете Items.Add или Items.AddRange для своего listBoxMotoren, может быть последовательным, если вы делаете это при добавлении или удалении вашего элемента в listBoxMotoren.
private void buttonAddbrand_Click(object sender, EventArgs e) {
if (brandNo >= 10)
return; //cannot add more brand
Brands[brandNo++] = textBoxMerk.Text;
listBoxMotoren.DataSource = null; //the cheapest and dirtiest trick to do this
listBoxMotoren.DataSource = Brands; //Maintaining the style, use `DataSource` to accommodate new data
}
Наконец, если вы хотите удалить элемент бренда по своему желанию, вам может понадобиться еще один Control в вашем Form1 в качестве входных данных для того, какой элемент бренда вы хотите удалить при необходимости. Но имейте в виду, что это может «разрушить» последовательность ваших элементов, и поэтому вам может потребоваться «повторно упорядочить» ваш элемент.
Теперь предположим, что вы используете NumericUpDown для удаления и инициируете удаление с помощью buttonDeletebrand, тогда вы должны сделать что-то вроде этого
private void buttonDeletebrand_Click(object sender, EventArgs e) {
int indexToDelete = (int)numericUpDownMotorenNumberDeleted.Value; //note the casting to (int)
if (indexToDelete < 0 || indexToDelete >= brandNo || brandNo <= 0) //can only delete index no [0] to [brandNo-1], and if the brand no > 0
return; //invalid index
for (int i = indexToDelete; i < brandNo - 1; ++i)
Brands[indexToDelete] = Brands[indexToDelete + 1]; //resequencing
Brands[brandNo - 1] = string.Empty; //removes the last element after resequencing
listBoxMotoren.DataSource = null; //remember the cheapest and dirtiest trick?
listBoxMotoren.DataSource = Brands;
--brandNo; //reduce the brandNo by 1
}
В общем, вам нужно все вместе:
public partial class Form1 : Form {
string[] Brands = new string[10];
int brandNo;
public Form1() {
InitializeComponent();
Brands[0] = "Yamaha";
Brands[1] = "Suzuki";
Brands[2] = "Harley";
Brands[3] = "Kawasaki";
brandNo = 4;
listBoxMotoren.DataSource = Brands;
}
private void buttonAddbrand_Click(object sender, EventArgs e) {
if (brandNo >= 10)
return;
Brands[brandNo++] = textBoxMerk.Text;
listBoxMotoren.DataSource = null;
listBoxMotoren.DataSource = Brands;
}
private void buttonDeletebrand_Click(object sender, EventArgs e) {
int indexToDelete = (int)numericUpDownMotorenNumberDeleted.Value;
if (indexToDelete < 0 || indexToDelete >= brandNo || brandNo <= 0)
return;
for (int i = indexToDelete; i < brandNo - 1; ++i)
Brands[indexToDelete] = Brands[indexToDelete + 1];
Brands[brandNo - 1] = string.Empty;
listBoxMotoren.DataSource = null;
listBoxMotoren.DataSource = Brands;
--brandNo;
}
}
12.01.2016
private void buttonAddbrand_Click(object sender, EventArgs e) { if (brandNo >= 10) return; //cannot add more brand Brands[brandNo++] = textBoxMerk.Text; listBoxMotoren.DataSource = null; //the cheapest and dirtiest trick to do this listBoxMotoren.DataSource = Brands; //Maintaining the style, useDataSource` для размещения новых данных }` если ваш номер бренда не превышает 10, это должно что-то добавить 13.01.2016copiedмой код... Он должен бытьremade(тоже для вашего лучшего понимания!), а неcopied... Вы обрабатываете свое событиеbuttonAddbrand_Clickв своем дизайнере? 13.01.2016buttonAddbrandв дизайнере? Если вы этого не сделаете, вы не сможете войти в четный обработчикbuttonAddbrand_Click. Я имею в виду, что каждый из вашихcontrol(например,buttonAddbrand) в дизайнере, чтобы он мог войти в обработчик событий (например,buttonAddbrand_Click), должен иметь этот обработчик событий, добавленный в элемент управления. Обычно Visual Studio делает это автоматически, когда вы дважды щелкаете элемент управления в представлении дизайнера. Но если вы копируете и вставляете код, этот шаг пропускается. 13.01.2016class.csидентично имени в файлеclass.designer.cs, тогда событие сработает. Без чего причина, по которой вы ничего не добавили, не в том, что с программой что-то не так, а в том, что событиеbuttonclickвообще не обрабатывается. Проверьте это! 13.01.2016this.buttonAddbrand.Click += new System.EventHandler(this.buttonAddbrand_Click);в вашемdesigner.cs? 13.01.2016buttonAddbrand_Click, а затем запустите программу и нажметеbuttonAddbrand, действительно ли ваша программа попадет в обработчик событияbuttonAddbrand_Click? 13.01.2016BindingList13.01.2016