-2

On Form1, I want to make a button wich switches on/off a Form2's label's visibility (visible true or false). Thank you much, I'm beginner!

4

2 に答える 2

1

まず Form2 で、ラベルを に変更しModifiersますpublic

このコードは、Form1 と Form2 のみが同時に開いていることを前提としています。配列には現在開いているフォームが含まれているため、Application.OpenForms[]他のフォーム オブジェクトからアクセスできます。

1 つのオン/オフ ボタンが必要な場合は、ボタン クリック イベント ハンドラーを作成します。次に例を示します。

 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;
    }
}
于 2012-10-25T21:54:45.877 に答える
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 からこれを行うには他にも多くの方法があると確信していますが、これが私が何年も行ってきた方法です。

于 2012-10-25T21:55:38.033 に答える