【问题标题】:How do I use a PictureBox as a Button如何将 PictureBox 用作按钮
【发布时间】:2014-01-21 20:50:51
【问题描述】:
我想创建一个轮盘游戏,我制作了一个带有轮盘赌桌图像的PictureBox。
我尝试在属性和代码中设置Visibility = False:
pictureBox1.Visible = !pictureBox1.Visible;
但是当我点击隐藏的PictureBox 时,什么都没有发生。
你知道如何让它工作吗?
我想通过点击让它变得可见而不可见。
【问题讨论】:
标签:
c#
.net
winforms
button
picturebox
【解决方案1】:
一旦您将项目的可见性设置为 false,就无法再单击它。您可以在窗体或容器级别处理单击事件,检查鼠标坐标是否包含在 PictureBox 的边界中并使用它使其再次可见。
即
//Common eventhandler assigned to all of your PictureBox.Click Events
private void pictureBox_Click(object sender, EventArgs e)
{
((PictureBox)sender).Visible = false;
}
private void Form1_Click(object sender, EventArgs e)
{
foreach (var item in this.Controls) // or whatever your container control is
{
if(item is PictureBox)
{
PictureBox pb = (PictureBox)item;
if (pb.Bounds.Contains(PointToClient( MousePosition)))
{
pb.Visible = true;
}
}
}
}
【解决方案2】:
您的逻辑问题是,一旦PictureBox 变得不可见,您就不能再单击它了,因为它不再在表单上,虽然您可以肯定地单击它留下的空白区域,但您是还是没有点击。
一种可能性是放置/删除其背景图片,而不是使其可见/不可见,因此它似乎已经消失但实际上它仍然存在,仍然能够接收点击并响应事件。
【解决方案3】:
如果你想让pictureBox1不可见,你可以写pictureBox1.Visible = false;
编辑:你正在做的应该工作。我创建了一个winform并在里面放了一个图片框。我双击图片框以创建 Click 事件处理程序并输入pictureBox1.Visible = !pictureBox1.Visible;。当我调试程序并单击图片框时,它变得不可见。我想不出为什么它不适合你。
编辑:我明白你现在想要什么。当它不可见时,使其在单击时可见。不幸的是,我不知道该怎么做。
【解决方案4】:
一种可能很愚蠢但简单的方法可能是将一个图片框放在另一个之上。 pictureBox1 将是您的图片,pictureBox2 将没有图片。然后你可以这样做:
private void pictureBox1_Click(object sender, EventArgs e)
{
pictureBox1.Visible = false;
pictureBox2.Visible = true;
}
private void pictureBox2_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
pictureBox2.Visible = false;
}
【解决方案5】:
您可以将每个 PictureBox 控件放在一个 Panel 控件中。然后处理 Panel 和 PictureBox 的 Click 事件。
private void panel1_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
pictureBox1.Visible = false;
}