【问题标题】:C# Populating ListBox from another ClassC# 从另一个类填充 ListBox
【发布时间】:2015-07-02 12:00:01
【问题描述】:

我有主窗口代码:

 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是空的。

【问题讨论】:

标签: c# wpf


【解决方案1】:

您当前的方法失败了,因为您正在实例化一个新表单

 public static void MyCall()
        {
            MainWindow ControlForm = new MainWindow();

这会创建一个新表单(默认情况下不显示在屏幕上),它不会引用您已有的表单。

有多种方式可以从外部与来自外部的人进行交互。 可能的解决方案包括在实例化其他对象(或其他表单)时传递对主表单的引用,使表单使用只有一个实例的单例模式,您可以通过类中的静态属性公开该实例,以及以此类推。

无论您选择哪种方式来获取对实际显示表单的引用,您还需要公开列表框,或者创建一个接受要记录的数据并将其添加到列表框中的公共函数控制。

说了这么多,我强烈建议您查看其他可用的日志记录框架并选择一个来使用。对于除了最简单的日志记录要求之外的所有要求,推出自己的日志记录不如使用现有且经过验证的技术之一最佳。一旦你实现了一个,你就可以查看它的文档,了解如何根据需要访问和显示该数据。

【讨论】:

    【解决方案2】:

    正如我在评论中所说,您需要将表单传递给方法以便您可以访问它,而不是创建一个新的。

    通过创建一个新表单,您不再引用您可以看到的相同表单。您的代码正在运行,但它正在更新表单的不同实例。

     private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Program.MyCall(this);
        }
    
    public static void MyCall(Form form)
        {
            form.Logger.Items.Add("Obtaining info ....");
        }
    

    【讨论】:

    • 您的代码错误。您正在传递一个引用,但随后忽略了 MyCall 函数中的该引用,不必要地实例化另一个表单,然后在错误的对象上调用 .Logger :)
    • @irreal 是啊,忘记清理方法了。太急于回答。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 2018-10-09
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多