繁体   English   中英

C#从另一个类填充ListBox

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM