如何计算面板的哪个项目被选中

How to calculate which item of panel was selected

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

我有一个 Panel 充满了 PictureBoxes,有什么方法可以计算被点击的 PictureBoxes 的数量吗?例如,如果我有一个 ListBox,我可以很容易地输入 listBox1.SelectedIndex 并得到这个数字。

我认为使用 Panel 并不容易,但实际上有什么方法可以做到这一点吗?

尝试使用 ListBox 的 'SelectedItem' 属性 并将其绑定到 ViewModel 上的 属性。

如果您只使用 StackPanel 之类的东西?那么不,StackPanel 没有内置此功能。使用带有自定义模板的列表框。

这取决于你真正想做什么。 PictureBoxes 中没有内置的 属性 来选择或标记它们。

您可以在 PanelControls 集合中的 Click 事件中获取 PictureBox 的索引,如下所示:

private void pictureBox_Click(object sender, EventArgs e)
{
   int index = yourPanel.Controls.IndexOf(sender as PictureBox );
}

您可以并且可能应该将 same 事件分配给 all PB 的 Clicks!

如果您只是想使用 PictureBox

PictureBox pb = sender as PictureBox;
pb.Image = ... 

或者您可以遍历 Controls 以找到 Focus。但即使它在那里也只是键盘焦点,而且,因为只能有 一个 ,即使单击 Button 也不会持续存在。所以这个不推荐

因此,如果您想引用上次单击的 PB,只需将其存储在 class 变量或 Panel's Tag 中:

PictureBox selectedPB  = null;

private void pictureBox_Click(object sender, EventArgs e)
{
   selectedPB  = sender as PictureBox;
   // or 
   yourPanel.Tag = sender as PictureBox;
}

如果您想收集多个 PB,可以将它们添加到 List:

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);
}

并访问号码作为 clickedBoxes.Count ..