如何计算面板的哪个项目被选中
How to calculate which item of panel was selected
我正在编写一个用于浏览图片的 C# 小程序,但卡住了。
我有一个 Panel
充满了 PictureBoxes
,有什么方法可以计算被点击的 PictureBoxes
的数量吗?例如,如果我有一个 ListBox
,我可以很容易地输入 listBox1.SelectedIndex
并得到这个数字。
我认为使用 Panel
并不容易,但实际上有什么方法可以做到这一点吗?
尝试使用 ListBox 的 'SelectedItem' 属性 并将其绑定到 ViewModel 上的 属性。
如果您只使用 StackPanel
之类的东西?那么不,StackPanel 没有内置此功能。使用带有自定义模板的列表框。
这取决于你真正想做什么。 PictureBoxes
中没有内置的 属性 来选择或标记它们。
您可以在 Panel
的 Controls
集合中的 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
..
我正在编写一个用于浏览图片的 C# 小程序,但卡住了。
我有一个 Panel
充满了 PictureBoxes
,有什么方法可以计算被点击的 PictureBoxes
的数量吗?例如,如果我有一个 ListBox
,我可以很容易地输入 listBox1.SelectedIndex
并得到这个数字。
我认为使用 Panel
并不容易,但实际上有什么方法可以做到这一点吗?
尝试使用 ListBox 的 'SelectedItem' 属性 并将其绑定到 ViewModel 上的 属性。
如果您只使用 StackPanel
之类的东西?那么不,StackPanel 没有内置此功能。使用带有自定义模板的列表框。
这取决于你真正想做什么。 PictureBoxes
中没有内置的 属性 来选择或标记它们。
您可以在 Panel
的 Controls
集合中的 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
..