好的,我遇到了一个问题,我什至不确定到底发生了什么。基本上:我有一个用于单击按钮的 mouseup 事件。该事件将删除 1 个按钮并物理移动屏幕上的所有按钮以填补空白。所以如果你有 2 行 2 个按钮
Button1 Button2
Button3 Button4
然后单击 Button1,它会移动最后 3 个,所以你现在有了
Button2 Button3
Button4
好的,所以,在这个事件处理程序结束时,它会截取屏幕截图并保存(将按钮 1-4 的先前图像替换为按钮 2-4 的新图像)。
事件处理程序如下所示
public void Handle_Button_MouseUp(object sender, MouseEventArgs e)
{
//Get rid of the button that was clicked
...some unnecessary to the question code here...
//Rearrange the remaining buttons to fill the gap
Rearrange_Buttons_In_Tray(element);
//Save the screenshot
imageBox.Image = SavePanel1Screenshot();
}
截图代码是
public Image SavePanel1Screenshot()
{
int BorderWidth = (this.Width - this.ClientSize.Width) / 2;
int TitlebarHeight = this.Height - this.ClientSize.Height - BorderWidth;
Rectangle rect = new Rectangle(0, 0, panel1.Width, panel1.Height);
Bitmap bmp = new Bitmap(panel1.Width, panel1.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(this.Left + panel1.Left + BorderWidth, this.Top + panel1.Top + TitlebarHeight, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
Image screenShot;
screenShot = (Image)bmp;
return screenShot;
}
.
public void Rearrange_Buttons_In_Tray(int element)
{
for (int i = element; i < buttonList.Count; i++)
{
Place_Button_In_Tray(buttonList[i].buttonSaved, i, true);
buttonList[i].element = i;
}
}
清理了一些不必要的问题部分以避免混乱。很抱歉弄乱了缩进。注意:按钮不在面板中,就在面板顶部。我只是将面板用于测量和美学目的
private void Place_Button_In_Tray(Button button, int element, bool isReArrange)
{
button.Width = bigButtonWidth;
button.Height = bigButtonHeight;
Image buttonImage = button.Image;
int numButtonsHoriz = panel1.Width / button.Width;
int numButtonsVerti = panel1.Height / button.Height;
int extraSpaceHoriz = (panel1.Width % button.Width) / (numButtonsHoriz);
int extraSpaceVerti = (panel1.Height % button.Height) / numButtonsHoriz;
int buttonCount;
if (!isReArrange)
buttonCount = buttonList.Count - 1;
else
buttonCount = element;
if ((buttonCount) < numButtonsHoriz)
{
button.Location = new Point(panel1MinX + (button.Width * (buttonCount)) + extraSpaceHoriz, (panel1MinY + extraSpaceVerti));
}
else
{
int newLine = (buttonCount) % numButtonsHoriz;
button.Location = new Point(panel1MinX + (button.Width * (newLine)) + extraSpaceHoriz, ((panel1MinY + extraSpaceVerti) + (button.Height * ((buttonCount) / 2) - ((buttonCount) % 2))));
}
现在我的问题是:图像是一个空白屏幕。并不是说它没有拍照——它是在屏幕上显示按钮 2-4 之前拍照(当我逐步执行程序时,我可以明显地看到这种情况发生。在截取屏幕截图时,屏幕是完全空白。只有在需要之后按钮才会重新出现在屏幕上)!出于某种原因,它们直到事件处理程序完成后才会呈现。一旦事件处理程序中的最后一段代码完成(屏幕截图保存),按钮都会重新出现在各自的位置,尽管在整个过程中按钮的可见性根本没有修改(因此它们仍然可见整个时间)。
我对到底发生了什么感到有些困惑,更重要的是,在事件处理程序发生后如何获取该屏幕截图。>_> 有没有人对可能发生的事情有任何建议,更重要的是,如何获得该屏幕截图?
编辑:我的描述有点难以理解。我深感抱歉。很难准确地说明我正在尝试做什么以及正在发生什么。这是一个更紧凑且重点突出的版本:
基本上,我只是想隐藏 4 个按钮中的 1 个。屏幕上的其他 3 个按钮被移动到新位置。由于某种原因,当它们被移动时,它们就会从屏幕上消失。尽管我从未修改过它们是否可见,但它们直到 mouseup 功能完成后才会重新出现。我只是改变他们的位置。我希望屏幕截图包含这 3 个按钮,但由于某种原因,它们直到整个 mouseup 功能结束后才会重新出现。>_> 所以我的截图是一个空的屏幕,没有按钮