C# 操纵其他窗体上的控件
我试图操纵PictureBox(C# 操纵其他窗体上的控件,c#,winforms,picturebox,C#,Winforms,Picturebox,我试图操纵PictureBox(pBATalk),以便在关闭表单时显示(PAInput)。所以基本上我想在第二张表单关闭时显示一张图片 第二表格 public void PAInput_FormClosing(object sender, FormClosingEventArgs e) { this.Hide(); fPAMain.PATalkActive(false); e.Cancel =
pBATalk
),以便在关闭表单时显示(PAInput
)。所以基本上我想在第二张表单关闭时显示一张图片
第二表格
public void PAInput_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
fPAMain.PATalkActive(false);
e.Cancel = true;
}
MainForm:
public void PATalkActive(bool active)
{
//MessageBox.Show("");
if (active == true)
{
pBPATalk.Hide();
}
if (active == false)
{
pBPATalk.Show();
}
}
每当我关闭
PAInput
时,它将触发PATalkActive
,但只会触发消息框。Show(“”)而不是pBATalk.Hide()代码>或pBATalk.Show()代码>好吧,我不太确定您在这里想要完成什么,但首先您要保持PAInput打开,这一行是e.Cancel=true。除此之外,MessageBox.Show(“”);将打开一个显示文本的模式窗口,直到该窗口关闭为止,该方法的其余部分将不会运行。MessageBox
的目的是测试是否从调用代码的那一刻起就到达了该代码,代码本身的位置并不重要,因为它只是验证是否使用了该代码。另外,我刚刚禁用了e.Cancel
,代码仍然不会隐藏或显示pBPATalk
@zalomon@BRO_THOM不要使用MessageBox进行调试,因为它会干扰其他进程。使用调试中断或debug.WriteLine等@LarsTech,我刚刚使用了Debugger.break()在if(active==false)
代码中的code>并且它确实中断了,所以我可以假设它已经到达了代码。同时,我还使用了((PictureBox)(this.UserControlPanel.Controls[0])).Show()
附加到picturebox(我刚刚测试了它,它达到了控件的名称,所以它配置正确)。我在想,这个pBPATalk变量是图片应该显示的表单的一个实例吗?如何分配它?除此之外,您如何将要显示的图片传递到表单中?很抱歉问一个显而易见的问题。您是否通过在pBPATalk.Show()上放置断点来跟踪代码,以查看是否达到了该代码?如果是,您是否手动使控件可见?您是否在Show()语句之后尝试了this.Refresh()来强制表单重新绘制?@Spevy我也想到了这一点,但不幸的是,事实并非如此。奇怪的是,它确实“使用”了只读代码。我怀疑这可能是许可的事情。