我有2个表单连接到数据库,LoadDocument
表单和Fom1
是主要表单。在LoadDocument
我从我的数据库中获取文档名称,当我关闭LoadDocument
时,我将文档ID发送到Form1
,以便我可以在那里检索其内容。
唯一的问题是,如果我在Form1
中创建了一个函数,名为public void showContent()
我的LoadDocument
无法调用它,因为它不是静态的,如果我将其设为静态,我在创建radioButtons
时遇到问题。
public partial class Form1 : Form
{
public void showTasks()
{
radioButtons = new RadioButton[numberOfTasks];
for (int i = 0; i < numberOfTasks; ++i)
{
radioButtons[i] = new RadioButton();
radioButtons[i].Text = "Task " + (i+1);
radioButtons[i].Location = new System.Drawing.Point(
10, 10 + i * 20);
groupBox1.Controls.Add(radioButtons[i]);
radioButtons[i].Click += new EventHandler(this.radioButtons_Click);
}
}
}
有没有办法可以从LoadDocument
调用此函数而不使其静态?我是否必须使LoadDocument
动态,在这种情况下如何?
编辑:我想这段代码非常相关:
private LoadDocument m_form1;
private bool m_underConstruction = false;
private void ShowLoadDocument()
{
if (m_underConstruction)
{
// We're about to show it anyway
return;
}
m_underConstruction = true;
try
{
if (m_form1 == null)
{
m_form1 = new LoadDocument();
// m_form1.FormClosed += new FormClosedEventHandler(m_form1_FormClosed);
m_form1.Show();
}
}
finally
{
m_underConstruction = false;
}
m_form1.BringToFront();
m_form1.Activate();
}
答案 0 :(得分:2)
我不确定控件流和两个表单的共存,但您可以将Form1的实例传递给LoadDocument并直接在该对象上调用该方法。像:
public class LoadDocument : Form {
private Form1 form1;
public LoadDocument(Form1 form1) {
this.form1 = form1;
}
// later
public void Method() {
form1.showTasks();
}
}
public class Form1 : Form {
public void SomeMethod() {
LoadDocument doc = new LoadDocument(this);
doc.Show();
}
}
答案 1 :(得分:0)
您可以在showContent
。
Form1
方法
我了解LoadDocument
表单是从Form1
创建的。将Form1
的实例传递给LoadDocument
构造函数。这样,您就可以form1WhoCreatedMe.ShowContent()
中的某个地方LoadDocument
。{/ p>
答案 2 :(得分:0)
您不需要将其设为静态,但您需要引用Form1
来调用它。您可以在创建时将此引用传递给LoadDocument
的构造函数:
public class Form1 : Form
{
...
LoadDocument loadDocument = new LoadDocument(this);
loadDocument.ShowDialog();
...
}
public class LoadDocument : Form
{
private readonly Form1 _form1;
public LoadDocument(Form1 form1)
{
_form1 = form1;
InitializeComponent();
}
...
_form1.showTasks();
...
}