如何在c#中编辑其他表单的属性?

时间:2012-10-25 21:20:31

标签: c#

在Form1上,我想创建一个按钮,用于打开/关闭Form2标签的可见性(可见真或假)。非常感谢,我是初学者!

2 个答案:

答案 0 :(得分:1)

首先,在Form2上,将标签的Modifiers更改为public

此代码假定只有Form1和Form2同时打开。 Application.OpenForms[]数组包含当前打开的表单,因此您可以从其他表单对象访问它们。

如果您需要一个开关按钮,则创建一个按钮单击事件处理程序,例如:

 public partial class Form1 : Form
 {
    Namespace.Form2 form2 = (Namespace.Form2)Application.OpenForms[1];

    //Single Button event handler    
    private void onOffClick(object sender, EventArgs e)
    {
           form2.LableName.Visible = !form2.LabelName.Visibility;
    }
}

现在,如果您想要一个开启和关闭按钮,那么为每个按钮创建一个事件处理程序。

public partial class Form1 : Form
{
    Namespace.Form2 form2 = (Namespace.Form2)Application.OpenForms[1];

    //On Button event handler    
    private void onClick(object sender, EventArgs e)
    {
           form2.LableName.Visible = true; 
    }

    //off Button event handler    
    private void offClick(object sender, EventArgs e)
    {
           form2.LableName.Visible = false;
    }
}

答案 1 :(得分:0)

这是你应该做的。更简单但不推荐的解决方案。我写这篇文章只是为了表明它有多么简单:

 public partial class Form1 : Form
 {
        Form2 form2;
        public Form1()
        {
            InitializeComponent();
            form2 = new Form2();
            form2.Show();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            bool labelVisible = form2.ToggleLabelVisibility();
        }
 }
public partial class Form2 : Form
{
     public Form2()
     {
        InitializeComponent();
     }

     public bool ToggleLabelVisibility()
     {
         label1.Visible = !label1.Visible;
         return label1.Visible;
     }
}

更好的解决方案应该在Form2上调用委托: 在Form1中只更改此:

private void button1_Click(object sender, EventArgs e)
{
      bool labelVisible = (bool)form2.Invoke(form2.ToggleVisibility);
}

窗体2:

public partial class Form2 : Form
{
    public delegate bool visibilityToggler();
    public visibilityToggler ToggleVisibility;

    public Form2()
    {
        InitializeComponent();
        ToggleVisibility = new visibilityToggler(ToggleLabelVisibility);
    }
    public bool ToggleLabelVisibility()
    {
        label1.Visible = !label1.Visible;
        return label1.Visible;
    }
}

我必须说这是旧学校,我相信还有很多其他方法可以做到这一点,尤其是来自C#4.0,但这就是我多年来的做法。