我想在表单2的表单1中显示一个隐藏的对象

时间:2016-07-12 10:37:56

标签: vb.net winforms

所以我在PictureBox Label上隐藏了这个form1,我想在Button中按form2时显示它。

Form1代码:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.Label3.Hide()
    Me.PictureBox3.Hide()

Form2代码:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    PictureBox3.Show()

picturebox3中未声明form2,因此我该如何访问它?

3 个答案:

答案 0 :(得分:1)

有几种方法。正如其他人在答案中所述,以下是一种解决方案

  1. 声明一个返回PictureBox
  2. Form1的公共属性
  3. Form1的实例传递给Form2,以便Form2可以访问此Form1的实例并使用该属性
  4. 来源可能如下所示,例如:

    在Form1中

    public PictureBox ThePictureBox
    {
        get { return this.pictureBox1; }
    }
    

    在Form2中

    private Form1 form1Instance;
    
    public Form2(Form1 form1)
    {
        InitializeComponent();
        form1Instance = form1;
    }
    
    public void Button_Click(object sender, EventArgs e)
    {
        this.form1Instance.ThePictureBox.Visible = true;
    }
    

    另一种方式是:如果Form2打开Form1,您可以在Form2中声明一个事件,让Form1订阅它,从而通知{{1}图片框应该是可见的。这样您就不必公开一个应该是Form1私有的成员。

    这可能是这样的:

    在Form1中

    Form1

    在Form2中

    private void OpenForm2()
    {
        Form2 f2 = new Form2();
        f2.ShowPictureBox += ShowPictureBox; 
        f2.Show();
    }
    
    private void ShowPictureBox(object sender, EventArgs e)
    {
        this.pictureBox.Visible = true;
    }
    

    我知道您的示例代码是Visual Basic,但是当您标记问题“C#”时,我想您应该能够轻松地将其转换为VB.NET - 我的VB.NET是不够流利: - )

答案 1 :(得分:0)

首先,您需要能够从其他表单访问您的元素(因为您应该将访问修饰符设置为内部或公共)。 然后,您可以通过创建实例或将表单传递给其他形式的方法,从另一个表单调用相关元素。顺便提一下,您应该查看this link以获取详细说明。

答案 2 :(得分:0)

在某些情况下,我们需要以多种形式使用控件。这可以通过在不同形式之间共享控制来实现

在您的情况下,在按钮单击期间在Form2中添加控件,它应该可以工作。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
     Me.Controls.Add(Form1.PictureBox)
End Sub

注意:Form1.PictureBox是一个共享属性。我们应该在Form1.vb

中定义它
public Shared Property PictureBox As PictureBox
    Get
        Return Me.PictureBox3
    End Get
End Property