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