我有一个简单的表格程序,我一直在与之斗争一段时间。我只是希望能够从不同的类文件中调用一个方法(当在该类文件的代码中触发某个步骤时),以便在listBox中插入一个字符串。
这是我的主要方法,非常标准:
class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
这是函数,它驻留在我的MainForm.cs文件中,我可以从该类文件中调用(通过'TextToBox(myString);'):
public partial class MainForm : Form
{
...
// Function to output results to main Listbox window
public void TextToBox(string aString)
{
// Place messages in Main Display list box window
this.listBox1.Items.Insert(0, aString);
}
...
}
但我的问题是当我在另一堂课时,我想打电话给'TextToBox(myString);
'。如果我创建MainForm的另一个对象引用,代码编译正常,但listBox中不会显示任何内容。我该怎么做呢?我不能简单地使TextToBox()静态。我知道我必须创建对象引用,但我无法弄清楚如何引用ORFINAL MainForm,这是在Main方法中创建的。提前谢谢......
答案 0 :(得分:2)
这样可行,但只有当你有一个MainForm实例时才会有效。
public class MainForm : Form
{
public MainForm()
{
Instance = this;
}
public static MainForm Instance { get; private set; }
// Function to output results to main Listbox window
public void TextToBox(string aString)
{
// Place messages in Main Display list box window
this.listBox1.Items.Insert(0, aString);
}
}
public class Other
{
public void AddTextToListBox()
{
MainForm.Instance.TextToBox("Test");
}
}
...编辑... 替代方法:
class Program
{
public static MainForm MainFormInstance;
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainFormInstance = new MainForm();
Application.Run(MainFormInstance);
}
}
public class Other
{
public void AddTextToListBox()
{
Program.MainFormInstance.TextToBox("Test");
}
}
答案 1 :(得分:1)
我只是将一个委托传递给另一个类。
/* this runs (previous code was not guaranteed to run) */
class OtherClass
{
public delegate void TextToBox(string s);
TextToBox textToBox;
int next = 0;
public OtherClass(TextToBox ttb)
{
textToBox = ttb;
}
public void SendSomeText()
{
textToBox(next.ToString());
next++;
}
}
我假设您将从MainForm实例化OtherClass。这是你如何称呼“OtherClass”?
public partial class MainForm : Form
{
OtherClass otherClass;
public MainForm()
{
/* just two controls -- listBox1 and button1 */
InitializeComponent();
otherClass = new OtherClass(this.TextToBox);
}
public void TextToBox(string aString)
{
listBox1.Items.Add(aString);
}
private void button1_Click(object sender, EventArgs e)
{
otherClass.SendSomeText();
}
}
在按钮上单击下一个数字值将添加到ListBox的开头。如果您需要进一步的帮助,则必须发布一些代码。
答案 2 :(得分:0)
或者您可以使用单例模式或静态方法,并确保将该类包含在程序顶部的“using”语句中