我的问题很简单,但我不知道如何解决它。
如果我已经确定创建了多少个无人机,我的代码就可以工作。
INICIO
public partial class Inicio : Form
{
private Drone d1,d2;
private Arena arena;
public Inicio()
{
InitializeComponent();
}
private void btnconetar_Click(object sender, EventArgs e)
{
d1 = new Drone("192.168.1.10");
d2 = new Drone("192.168.1.20");
arena = new Arena(d1,d2);
arena.Show();
this.Hide();
}
}
竞技场:
public partial class Arena : Form
{
private Drone d1, d2;
public Arena(Drone d1,Drone d2)
{
InitializeComponent();
this.d1 = d1;
this.d2 = d2;
}
private void cb_drone_SelectedIndexChanged(object sender, EventArgs e)
{
if(cb_drone.SelectedIndex.ToString() == d1.ip_drone)
{
//do something
}
}
}
我的问题是:我如何为n架无人机做到这一点?每次我点击一个按钮就会添加一个新的无人机(d3,d4,d5等等),而在ARENA上,我需要检查哪个组合框选择的项目是无人机的ip。
private Drone d1, d2;
public Arena(Drone d1,Drone d2)
{
InitializeComponent();
this.d1 = d1;
this.d2 = d2;
}
在这部分代码中:例如,如果有10个Drone实例创建了公共竞技场(Drone d1,Drone d2,Drone d3等等),我该如何简化?
编辑:.............
List<Drone> lista_drones = new List<Drone>;
private Arena arena;
public Inicio()
{
InitializeComponent();
}
private void Inicio_Load(object sender, EventArgs e)
{
}
private void btnconetar_Click(object sender, EventArgs e)
{
lista_drones.Add(new Drone("192.168.1.10"));
lista_drones.Add(new Drone("192.168.1.20"));
arena = new Arena(lista_drones);
arena.Show();
this.Hide();
}
public partial class Arena : Form
{
public Arena(List<Drone> lista_drones)
{
InitializeComponent();
}
private void cb_drone_SelectedIndexChanged(object sender, EventArgs e)
{
if(cb_drone.SelectedIndex.ToString() == )
{
//do something
}
}
}
答案 0 :(得分:3)
如果您拥有未知数量的无人机,那么您希望使用集合类型而不是不同的字段:
public partial class Inicio : Form
{
private List<Drone> drones;
private Arena arena;
...
public partial class Arena : Form
{
private List<Drone> drones;
public Arena(IEnumerable<Drone> drones)
{
InitializeComponent();
drones = new List<Drone>(drones);
}
...
答案 1 :(得分:0)
请在构造函数中使用'params'关键字:
public partial class Arena : Form
{
private readonly Drone[] d;
public Arena(params Drone[] d)
{
InitializeComponent();
this.d = d;
}
private void cb_drone_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (var di in this.d)
{
if(cb_drone.SelectedIndex.ToString() == di.ip_drone)
{
//do something
}
}
}
}
这样你可以像这样使用它(当你已经知道它们的数量时)
public partial class Inicio : Form
{
private Drone d1,d2;
private Arena arena;
public Inicio()
{
InitializeComponent();
}
private void btnconetar_Click(object sender, EventArgs e)
{
d1 = new Drone("192.168.1.10");
d2 = new Drone("192.168.1.20");
....
dn = new Drone("192.168.1.xx");
arena = new Arena(d1,d2);
arena.Show();
this.Hide();
}
}
或者如果您不知道其中有多少
public partial class Inicio : Form
{
private List d;
private Arena arena;
public Inicio()
{
InitializeComponent();
}
private void btnconetar_Click(object sender, EventArgs e)
{
d = new List(){ new Drone("192.168.1.10"), /* whatever */ };
arena = new Arena(d.ToArray());
arena.Show();
this.Hide();
}
}
答案 2 :(得分:0)
您需要拥有无人机列表,因此请使用List<Drone>
。然后将该列表传递给您的Arena
:
public partial class Inicio : Form {
private List<Drone> drones;
private Arena arena;
public Inicio() {
InitializeComponent();
this.drones = new List<Drone>();
}
private void btnconetar_Click(object sender, EventArgs e) {
d1 = new Drone( "192.168.1.10" );
d2 = new Drone( "192.168.1.20" );
drones.Add( d1 );
drones.Add( d2 );
// more drones
arena = new Arena( drones );
arena.Show();
this.Hide();
}
}
在Arena
中,将组合框的数据源设置为List<Drone>
。组合框更改后,您可以获得SelectedItem
并选择无人机对象。我还将展示如何在需要时获取代码中的其他值。您不需要循环搜索所选项目。
public partial class Arena : Form {
private List<Drone> drones;
public Arena(List<Drone> drones) {
InitializeComponent();
this.drones = drones;
cb_drone.DataSource = drones;
// This should be whatever the property name is in your drone class
cb_drones.ValueMember = "DroneIp";
// THis should be whatever the property name is
// in your drone class that you want to display to the user
cb_drones.DisplayMember = "DroneSomething";
}
private void cb_drone_SelectedIndexChanged(object sender, EventArgs e) {
// will give you the drone object
var selectedDrone = cb_drone.SelectedItem;
// var value = cb_drone.SelectedValue; will give you the Ip (whatever you specified in ValueMember)
// var selectedDrone = this.drones.Where(x => x.DroneIp == cb_drone.SelectedValue)
//do something with selectedDrone or the other things
}
}