我有一个名为Vehicle
的类和一个名为Car
的类,它继承自Vehicle
。我有一个表单,您可以通过填写一些信息并单击按钮来创建汽车对象。此信息将插入到gridview中。
我想要做的是通过我用它创建的ID访问一个特定的Car对象。
我创建了一个ID来识别每个汽车对象。我希望能够访问某个对象,例如ID为3的Car对象。
我有一个组合框,我想填写所有的汽车ID,以便我稍后可以选择一个特定的汽车对象并克隆它,作为一个例子。我使用一个事件检查RowsAdded到DataGridView
。添加行后,ComboBox
应添加car id
。
我遇到的问题是,在检查testCar
的情况下,我无法访问对象RowsAdded
。我试图在buttonclick
事件之外声明对象实例,然后在buttonclick
事件中更改该对象,但这不起作用。我想也许我需要创建一个对象数组,我插入每个不同的汽车。
继承我的代码:
class Car : Vehicle
{
string carBrand = "";
private static int carID { get; set; }
public int iD { get; set; }
public string CarBrand { get; set; }
public Color CarColor { get; set; }
public Car()
{
carID = 0;
CarBrand = "Volvo";
CarColor = Color.Black;
}
public Car(string vehicleName, int vehicleYear, string carBrand, Color carColor)
{
this.iD = GetNextCarID();
this.VehicleName = vehicleName;
this.VehicleYear = vehicleYear;
this.CarBrand = carBrand;
this.CarColor = carColor;
}
static Car()
{
carID = 0;
}
protected int GetNextCarID()
{
return ++carID;
}
public void button1_Click(object sender, EventArgs e)
{
string inputModell = txtModell.Text;
int inputCarYear = Int16.Parse(txtCarYear.Text);
string inputBrand = cmbCarBrands.SelectedItem.ToString();
Color inputColor = Color.Black;
if (colorDialog1.Color != Color.Black)
{
inputColor = colorDialog1.Color;
}
Car testCar = new Car(inputModell, inputCarYear, inputBrand, inputColor);
int id = testCar.iD;
if (txtModell.Text != string.Empty && txtCarYear.Text != string.Empty)
{
dataGridView1.ColumnCount = 6;
dataGridView1.Columns[0].Name = "ID";
dataGridView1.Columns[1].Name = "Modell";
dataGridView1.Columns[2].Name = "Årtal";
dataGridView1.Columns[3].Name = "Märke";
dataGridView1.Columns[4].Name = "Färg";
dataGridView1.Columns[5].Name = "Orginal/Klon";
int currRow = dataGridView1.Rows.Add(testCar.iD, testCar.VehicleName, testCar.VehicleYear, testCar.CarBrand, "", "Orginal");
DataGridViewCellStyle cellStyle = new DataGridViewCellStyle();
cellStyle.BackColor = testCar.CarColor;
dataGridView1.Rows[currRow].Cells[4].Style = cellStyle;
}
}
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
groupBox2.Enabled = true;
cmbCarID.Items.Add(testCar.iD);
}
答案 0 :(得分:0)
是的,听起来你想要一系列汽车,类似于这个
class Car : Vehicle
{
...
List<Car> CarList;
public Car()
{
CarList = new List<Car> // do this in each constructor
...
}
...
public void button1_Click(object sender, EventArgs e)
{
Car car = new Car();
...
CarList.Add(car);
}
}
在附注中,我不知道Car
类是否是button_1Click
最适合的地方。
答案 1 :(得分:0)
Dictionary
仅适用于此类任务。
在表单上创建一个Dictionary<int, Car>
作为字段:
private Dictionary<int, Car> carLookup = new Dictionary<int, Car>();
然后在按钮点击事件中添加每辆新车:
carLookup[newCar.iD] = newCar;
现在,您可以使用字典轻松地通过ID查找汽车:
public Car GetCar(int id)
{
return carLookup[id];
}
答案 2 :(得分:0)
无需收藏! 您可以通过访问datagridview的最后一行来访问已添加到datagridview的最后一辆车
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
int lastRowIndex = dataGridView1.Rows.Count-1;
int carId = int.Parse(dataGridView1.Rows[lastRowIndex].Cells[0].Value.ToString());
groupBox2.Enabled = true;
cmbCarID.Items.Add(carId);
}