我的程序中有4个表单:
我使用StartForm启动程序,然后用户可以使用按钮启动UIForm1和2.还有另一个名为DebugForm的表单,其中有一个textBox,我将所有错误都放在其中使用UIForm1和2(例外和等。)。
不,我想在StartForm中声明DebugForm,因此UIForm1和2都可以访问它。我该怎么做?我尝试将其声明为公开但无法访问:
//in StartForm
public DebugForm dFrm = new DebugForm(); //Not working
//in UIForm1 or 2
//add a error to textbox
dFrm.textBox.Text += "ERROR NUMBER 1"; //Not working
dFrm.Show(); //Not working
我怀疑我必须以某种方式使用delegate关键字。怎么可能这样做?
答案 0 :(得分:1)
快速修复是将StartForm中的DebugForm变量声明为:
//in StartForm
public static DebugForm dFrm = new DebugForm();
并以其他形式使用它:
StartForm.dFrm.textBox.Text += "ERROR NUMBER 1";
StartForm.dFrm.Show();
答案 1 :(得分:1)
在没有将StartForm实际暴露给UIForms1,2的情况下执行此操作的干净方法是更改UIForm1和2的构造函数以执行操作。
private Action<string> _showDebugForm;
public UIForm1(Action<string> showDebugForm)
{
_showDebugForm = showDebugForm
}
并致电
if(_showDebugForm!=null)
{
_showDebugForm("ERROR NUMBER 1");
}
在UIForm1中
当你创建UIForm1时,2会做这样的事情
new UIForm1(str =>
{
dFrm.textBox.Text += str;
dFrm.Show();
});
答案 2 :(得分:0)
委托是方法的“指针”,因此它表示正在分配的函数或多个方法。它不能用于表示对象。
为什么不在其中创建包含字符串对象(List)的集合,然后在创建调试表单时可以在文本框中清空它。
您在mainForm中创建集合并将其传递给UI1&amp; 2个表格。然后,当您创建DebugForm时,可以将其传递到那里并执行任何您喜欢的操作。
您可以在每个表单中创建一个属性,您可以为其分配此集合。
答案 3 :(得分:0)
在StartForm
中声明可以访问DebugForm
public class MainForm
{
private DebugForm debugForm = new DebugForm();
public DebugForm DebugForm
{
get { return this.debugForm; }
}
}
然后,您可以通过DebugForm
StartForm.DebugForm
startForm.DebugForm.Show();
startForm.DebugForm.TextBox.Text += "Error";