[英]C# Populating ListBox from another Class
我有主窗口代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
UserName.Text = Properties.Settings.Default.UserName;
PassWord.Password = Properties.Settings.Default.Password;
}
//calling from click event atm because its easier to test
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Program.MyCall();
}
}
现在用方法class
:
public class Log
{
public static void MyCall()
{
MainWindow ControlForm = new MainWindow();
ControlForm.Logger.Items.Add("Obtaining info ....");
}
}
我有一个更大的应用程序,我想在ListBox
中创建事件日志,因此每次执行method
时,我都希望在ListBox
中对其进行log
。 因此,基本上上述方法失败了...没有错误生成,但ListBox
为空。
您当前的方法失败了,因为您要实例化新表格
public static void MyCall()
{
MainWindow ControlForm = new MainWindow();
这将创建一个新表单(默认情况下不会显示在屏幕上),它不会引用您已经拥有的表单。
有多种从外部与a进行交互的方式。 可能的解决方案包括在实例化其他对象(或其他表单)时传递对主窗体的引用,使该窗体使用单例模式,在该模式中,您将仅拥有一个实例,可以通过类中的静态属性将其公开;以及以此类推。
无论采用哪种方式获取对实际显示的表单的引用,都将需要使“列表框”公开,或创建一个公共函数来接受要记录的数据并将其添加到“列表框”控件中。
综上所述,我强烈建议您研究其他可用的日志记录框架,然后选择要使用的框架。 对于除最简单的日志记录要求之外的所有要求,推出自己的方法都不如使用现有的可靠技术之一理想。 实施完一个后,您将可以根据需要查找有关访问和显示该数据的文档。
正如我在评论中所说,您需要将表单传递给方法,以便可以访问它,而不是创建一个新表单。
通过创建新表单,您将不再引用可以看到的相同表单。 您的代码正在运行,但是正在更新表单的其他实例。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Program.MyCall(this);
}
public static void MyCall(Form form)
{
form.Logger.Items.Add("Obtaining info ....");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.