C#从另一个类填充ListBox

时间:2015-07-02 12:00:02

标签: c# wpf

我有主窗口代码:

 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时,我想在log中创建ListBox {1}}。 所以基本上上面的方法都失败了......没有产生错误但是ListBox是空的。

2 个答案:

答案 0 :(得分:1)

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

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

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

有多种方法可以与来自外部的来自互动。 可能的解决方案包括在实例化其他对象(或其他形式)时传递对主窗体的引用,使窗体使用单例模式,您只能拥有一个实例,您可以通过类中的静态属性公开它等等。

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

说了这么多,我强烈建议您查看其他可用的日志框架并选择一个使用。除了最简单的日志记录要求之外,推出自己的日志记录要求并不像使用现有和经过验证的技术那样优化。实施之后,您就可以查看有关根据需要访问和显示该数据的文档。

答案 1 :(得分:0)

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

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

 private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        Program.MyCall(this);
    }

public static void MyCall(Form form)
    {
        form.Logger.Items.Add("Obtaining info ....");
    }