如何从另一种形式调用函数

Exi*_*nea 4 c# void

在我的项目中,我有一个设置表单和一个主表单.我试图从设置表单中调用Main表单的MasterReset函数,但没有任何反应.
Master form的Masterreset功能如下所示.

public void MasterReset()
    {
        DialogResult dialogResult = MessageBox.Show("Are you sure you want to perform master reset? All settings will be set to default.", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
        if (dialogResult == DialogResult.Yes)
        {
            string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string phonebook_path = path + "\\Phonebook\\Contacts.xml";
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(phonebook_path);
            XmlNode xNode = xDoc.SelectSingleNode("People");
            xNode.InnerXml = "";
            xDoc.Save(phonebook_path);
            listView1.Clear();
            people.Clear();
        }
        else if (dialogResult == DialogResult.No)
        {
            return;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在从"设置"表单中访问它

private void btn_MasterReset_Click(object sender, EventArgs e)
{
    Main f1 = new Main();
    f1.MasterReset();
}
Run Code Online (Sandbox Code Playgroud)

为什么我没有看到任何结果?

BRA*_*mel 11

你知道 继承的构成是什么吗?

在你有的形式,你MasterReset应该做这样的事情:

Llet假设在你的第二种形式中你有这样的东西,让我们假设你的"主形式"将被称为"MasterForm".

public partial class Form1 : Form
{
    private MasterForm _masterForm;  

    public Form1(MasterForm masterForm )
    {
        InitializeComponent();
        _masterForm = masterForm;  

    }
}
Run Code Online (Sandbox Code Playgroud)

这是masterForm类中的代码:

 private void button2_Click(object sender, EventArgs e)
 {
     Form1  form1 = new Form1(this);

 } 
Run Code Online (Sandbox Code Playgroud)

这是你的形式1:

private void btn_MasterReset_Click(object sender, EventArgs e)
{
    _masterForm.MasterReset();
} 
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 谢谢你的评论会让我更好 (2认同)

小智 8

namespace F1
{
    // Method defined in this class
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
           
        }

        //This method I would like to call in other form
        public void function()
        {
            MessageBox.Show("Invoked");
        }
        
        // opening the new form using button click
        private void OpenNewForm_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog();
        }
    } 

    // This is second form
    public partial class Form2: Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        // on button click Form1 method will be called
        private void button1_Click(object sender, EventArgs e)
        {
            var mainForm = Application.OpenForms.OfType<Form1>().Single();
            mainForm.function();
        }
     }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

这对我有用:在您的 Program 类中,声明一个名为Form. 然后,在Main方法的开头,使用Form = new Main();所以现在,在启动您的应用程序时,使用 Application.Run(Form);

public static Main Form;

static void Main() {
    Form = new Main();
    Application.Run(Form)
}
Run Code Online (Sandbox Code Playgroud)

现在,从另一种形式调用函数很简单。

Program.Form.MasterReset();  //Make sure MasterReset is a public void
Run Code Online (Sandbox Code Playgroud)