C# 如何计算选择了面板的哪个项目

C# 如何计算选择了面板的哪个项目,c#,panel,counting,C#,Panel,Counting,我正在编写一个浏览图片的小C#程序,但我被卡住了 我有一个面板满是图片框,有没有办法计算点击的图片框的数量?例如,如果我有一个ListBox,我可以轻松地键入listBox1.SelectedIndex并获取数字 我假设使用面板不是那么容易,但实际上有什么方法可以做到这一点吗?尝试使用列表框的“SelectedItem”属性,并将其绑定到ViewModel上的属性 如果您使用的只是类似于StackPanel?那么否,StackPanel没有内置此功能。使用带有自定义模板的列表框。这取决于您实际想

我正在编写一个浏览图片的小C#程序,但我被卡住了

我有一个
面板
满是
图片框
,有没有办法计算点击的
图片框
的数量?例如,如果我有一个
ListBox
,我可以轻松地键入
listBox1.SelectedIndex
并获取数字


我假设使用
面板
不是那么容易,但实际上有什么方法可以做到这一点吗?

尝试使用列表框的“SelectedItem”属性,并将其绑定到ViewModel上的属性


如果您使用的只是类似于
StackPanel
?那么否,StackPanel没有内置此功能。使用带有自定义模板的列表框。

这取决于您实际想要做什么。
PictureBoxes
没有内置属性使其成为选中状态或将其标记为选中状态

您可以在
面板
控件
集合的
点击事件中获得
图片框
的索引,如下所示:

private void pictureBox_Click(object sender, EventArgs e)
{
   int index = yourPanel.Controls.IndexOf(sender as PictureBox );
}
您可以而且可能应该将相同的事件分配给所有PBs'
点击

如果您只是想使用
PictureBox
write

PictureBox pb = sender as PictureBox;
pb.Image = ... 
或者,您可以在
控件上循环
,找到一个具有
焦点的控件
。但是,即使只有键盘焦点在那里,而且因为只有一个,所以即使单击一个按钮也不会持久。。所以这是不推荐的

因此,如果要引用上次单击的PB,只需将其存储在类变量中,或者可能存储在
面板的标记中

PictureBox selectedPB  = null;

private void pictureBox_Click(object sender, EventArgs e)
{
   selectedPB  = sender as PictureBox;
   // or 
   yourPanel.Tag = sender as PictureBox;
}
如果要收集多个PBs,可以将它们添加到
列表中:

List<PictureBox> clickedBoxes = new List<PictureBox>();

private void pictureBox_Click(object sender, EventArgs e)
{
   PictureBox pb  = sender as PictureBox;
   if (!clickedBoxes.Contains(pb) ) clickedBoxes.Add(pb);
}
List clickedboxs=新建列表();
私有无效pictureBox\u单击(对象发送方,事件参数e)
{
PictureBox pb=发送方作为PictureBox;
如果(!clickedboxs.Contains(pb))clickedboxs.Add(pb);
}
然后在
单击框时访问号码。计数