簡體   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