如何计算面板的哪一项被选中
本文关键字:一项 何计算 计算 | 更新日期: 2023-09-27 17:50:59
我正在编写一个小小的c#程序来浏览图片,但是我卡住了。
我有一个充满PictureBoxes
的Panel
,有没有办法计算被点击的PictureBoxes
的数量?例如,如果我有一个ListBox
,我可以很容易地输入listBox1.SelectedIndex
并获得数字。
我认为这不是那么容易与Panel
,但实际上有任何方法来做到这一点?
这取决于您实际想要做什么。没有PictureBoxes
的内置属性使它们被选中。
您可以在Panel
的Controls
集合的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