C# 操纵其他窗体上的控件

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 =

我试图操纵PictureBox(
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我也想到了这一点,但不幸的是,事实并非如此。奇怪的是,它确实“使用”了只读代码。我怀疑这可能是许可的事情。