在我的项目中,我有一个设置表单和一个主表单.我试图从设置表单中调用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)
希望这可以帮助!
小智 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)