问题
I use two Forms:
Form1 contains button1
Form2 contains button2 and Panel1
My project starts using Form2. Then I click on button2 to show Form1
    private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.Show();
    }
Then on Form1, I click on button1 to hide Panel1 on Form2
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 FormInstance = new Form2();
        FormInstance.displayInit();
        FormInstance.Refresh();
    }
displayInit() is a method inside Form2:
    public void displayInit()
    {
        panel1.Visible = false;
    }
But the panel is not hidden, due to a refresh issue, any idea please ?
回答1:
The standard way of having two forms (or any two classes) talk to each other is with events.
In your case, add this to the top of the Form1 code:
public event ClosePanelHandler ClosePanel;
public delegate void ClosePanelHandler(object sender, EventArgs e);
Then, in Form1's Button1_Click event (this raises the event):
 private void button1_Click(object sender, EventArgs e)
    {
     if (ClosePanel != null){
       ClosePanel(this, new EventArgs());
    }}
-
Finally, Form2 needs to handle the event (and be listening for it) in order to take action:
 private void HandleCloseRequest(object sender, EventArgs e)
    {
     panel1.Visible = false;
    }
Also, modify
private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.ClosePanel += HandleCloseRequest;
        Frm.Show();
    }
I hope this helps a bit.
来源:https://stackoverflow.com/questions/11996273/how-to-modify-a-form-and-refresh-it-from-another-form