Во-первых, будьте осторожны с тем, где вы ставите фигурную скобку, чтобы убедиться, что код может быть скомпилирован.
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, use
DataSource` для размещения новых данных }` если ваш номер бренда не превышает 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
, тогда событие сработает. Без чего причина, по которой вы ничего не добавили, не в том, что с программой что-то не так, а в том, что событиеbutton
click
вообще не обрабатывается. Проверьте это! 13.01.2016this.buttonAddbrand.Click += new System.EventHandler(this.buttonAddbrand_Click);
в вашемdesigner.cs
? 13.01.2016buttonAddbrand_Click
, а затем запустите программу и нажметеbuttonAddbrand
, действительно ли ваша программа попадет в обработчик событияbuttonAddbrand_Click
? 13.01.2016BindingList
13.01.2016