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

本文关键字:一项 何计算 计算 | 更新日期: 2023-09-27 17:50:59

我正在编写一个小小的c#程序来浏览图片,但是我卡住了。

我有一个充满PictureBoxesPanel,有没有办法计算被点击的PictureBoxes的数量?例如,如果我有一个ListBox,我可以很容易地输入listBox1.SelectedIndex并获得数字。

我认为这不是那么容易与Panel,但实际上有任何方法来做到这一点?

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

这取决于您实际想要做什么。没有PictureBoxes的内置属性使它们被选中。

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

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

您可以并且可能应该将相同的事件分配给所有 PBs' Clicks !

如果您只是想使用PictureBox,请写入

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

或者您可以循环Controls以找到Focus。但是,即使它只存在于键盘焦点,并且,因为只能有一个,这甚至不会持续一个Button点击。所以这是不推荐

所以如果你想引用上次点击的PB,只需将其存储在一个类变量中或者在Panel's Tag:

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

如果要收集多个PBs,可以将它们添加到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 ..

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

如果你只是使用StackPanel之类的东西?那么不,StackPanel没有内置这个功能。使用自定义模板的ListBox