C# 如何从另一个类添加到列表框?
我已经看过几次这个帖子了,但我似乎无法让它为我申请 我想从我的C# 如何从另一个类添加到列表框?,c#,C#,我已经看过几次这个帖子了,但我似乎无法让它为我申请 我想从我的ServerController类向我的home类中的列表框添加项目 不完全确定如何进行,因此任何帮助都将不胜感激 家庭课程: public partial class frmHome : Form { serviceController sc = new serviceController(); public ListBox lb = new ListBox(); public frmHome()
ServerController
类向我的home
类中的列表框添加项目
不完全确定如何进行,因此任何帮助都将不胜感激
家庭课程:
public partial class frmHome : Form
{
serviceController sc = new serviceController();
public ListBox lb = new ListBox();
public frmHome()
{
lb = new ListBox();
InitializeComponent();
serviceController sc = new serviceController();
}
//ListBox Add
public void addItem(string item)
{
lb_msg.Items.Add(item);
lb_msg.Items.Add(item);
lb_msg.Items.Add("");
}
}
public class serviceController
{
ServiceController[] scServices;
//Start the service
public void startServices()
{
scServices = ServiceController.GetServices();
try
{
foreach (ServiceController scTemp in scServices)
{
if (scTemp.ServiceName == "MSSQL$SQLSERVER" || scTemp.ServiceName == "SQLBrowser")
{
if (scTemp.Status == ServiceControllerStatus.Stopped)
{
//Check to see if service is disabled
home.addItem("Attempting to start " + scTemp.ServiceName);
scTemp.Start();
scTemp.WaitForStatus(ServiceControllerStatus.Running);
}
if (scTemp.Status == ServiceControllerStatus.Running)
{
home.addItem(scTemp.ServiceName + " is running");
}
}
else if (scTemp.Status == ServiceControllerStatus.Running)
{
home.addItem(scTemp.ServiceName + " is already running");
}
}
serverStatus();
}
catch (Exception ex)
{
throw ex;
}
}
服务类别:
public partial class frmHome : Form
{
serviceController sc = new serviceController();
public ListBox lb = new ListBox();
public frmHome()
{
lb = new ListBox();
InitializeComponent();
serviceController sc = new serviceController();
}
//ListBox Add
public void addItem(string item)
{
lb_msg.Items.Add(item);
lb_msg.Items.Add(item);
lb_msg.Items.Add("");
}
}
public class serviceController
{
ServiceController[] scServices;
//Start the service
public void startServices()
{
scServices = ServiceController.GetServices();
try
{
foreach (ServiceController scTemp in scServices)
{
if (scTemp.ServiceName == "MSSQL$SQLSERVER" || scTemp.ServiceName == "SQLBrowser")
{
if (scTemp.Status == ServiceControllerStatus.Stopped)
{
//Check to see if service is disabled
home.addItem("Attempting to start " + scTemp.ServiceName);
scTemp.Start();
scTemp.WaitForStatus(ServiceControllerStatus.Running);
}
if (scTemp.Status == ServiceControllerStatus.Running)
{
home.addItem(scTemp.ServiceName + " is running");
}
}
else if (scTemp.Status == ServiceControllerStatus.Running)
{
home.addItem(scTemp.ServiceName + " is already running");
}
}
serverStatus();
}
catch (Exception ex)
{
throw ex;
}
}
在服务类
上,我想使用主页.addItem
我是否认为我需要在我的家庭课堂上制作一个公共列表框,并将它和我设计的列表框链接起来
我想要实现的是:
我想让它检查x
服务量以查看它的状态。如果已停止,则检查它是否已禁用并报告-如果已禁用,则尝试设置为自动,否则尝试启动它。我想写一个日志,因为它这样做
希望这能提供更多的澄清
谢谢 您可以通过构造函数传递它
public class serviceController
{
private ListBox home;
public serviceController(ListBox lb)
{
home = lb;
}
public void foo()
{
home.Items.Add("")
}
}
现在,当您创建serviceController的新对象时,需要传递一个listbox
serviceController sv = new serviceController(lb_msg);
然后,当您在serviceController中时,可以像在主类中一样使用变量lb
访问其他表单控件的另一种方法是
frmHome form = new frmHome();
ListBox lb = (ListBox)form.Controls["nameOfControl"];
lb.Items.Add("");
另外:serviceController应该以大写的serviceController开头,您可以通过构造函数传递它
public class serviceController
{
private ListBox home;
public serviceController(ListBox lb)
{
home = lb;
}
public void foo()
{
home.Items.Add("")
}
}
现在,当您创建serviceController的新对象时,需要传递一个listbox
serviceController sv = new serviceController(lb_msg);
然后,当您在serviceController中时,可以像在主类中一样使用变量lb
访问其他表单控件的另一种方法是
frmHome form = new frmHome();
ListBox lb = (ListBox)form.Controls["nameOfControl"];
lb.Items.Add("");
另外:serviceController应该以大写的serviceController开头,我强烈建议您采用绑定,而不是直接操作表单上的控件,目的是保持数据和UI分离。例如,您可以在类中有一个字符串列表(如果内存可用,则必须是BindingList),列表控件将绑定到该列表;通过这种方式,列表的内容将反映在UI中,您可以从其他地方自由地更新列表,将其作为数据,而无需考虑数据如何呈现的复杂性
最后,您可以提出类似于MVVM(模型-视图-视图-模型)或MVC的解决方案,在我看来,这是手动操作控件的最佳解决方案。我强烈建议您采用绑定,而不是直接操作表单上的控件,目的是保持数据和UI分离。例如,您可以在类中有一个字符串列表(如果内存可用,则必须是BindingList),列表控件将绑定到该列表;通过这种方式,列表的内容将反映在UI中,您可以从其他地方自由地更新列表,将其作为数据,而无需考虑数据如何呈现的复杂性
最后,您可以提出类似于MVVM(model-view-viewmodel)或MVC的解决方案,我认为这是手动操作控件的最佳解决方案。我已经编写了一个示例代码来演示我的建议。您必须将它与您正在使用的实际类型(例如类)相匹配。添加了代码注释,所以我不再在这里写太多了。如果你想玩这个代码,这里有一把小提琴:
我已经编写了一个示例代码来演示我的建议。您必须将它与您正在使用的实际类型(例如类)相匹配。添加了代码注释,所以我不再在这里写太多了。如果你想玩这个代码,这里有一把小提琴:
这立即违反了固体的SRP<代码>服务控制器在任何情况下都不应负责绑定GUI表单。它的唯一用途是跟踪
ServiceController
对象。您的主窗体可以订阅在serviceController
中定义的事件,并从中获取这些消息。如果您感兴趣,我将演示如何操作。谢谢@Stefan-感谢home.Items。请添加Yes@NikhilVartak,那太棒了。我想使用订阅者,但不确定如何在这种情况下应用它。@SCramphorn检查我的答案。@NikhilVartak我不知道ServiceController是如何工作的,也不知道它是什么,我只是在一般编程中回答。您可以将其他类方法中的构造函数应用于列表或任何其他对象,以及立即违反SOLID中SRP的第二个解决方案<代码>服务控制器
在任何情况下都不应负责绑定GUI表单。它的唯一用途是跟踪ServiceController
对象。您的主窗体可以订阅在serviceController
中定义的事件,并从中获取这些消息。如果您感兴趣,我将演示如何操作。谢谢@Stefan-感谢home.Items。请添加Yes@NikhilVartak,那太棒了。我想使用订阅者,但不确定如何在这种情况下应用它。@SCramphorn检查我的答案。@NikhilVartak我不知道ServiceController是如何工作的,也不知道它是什么,我只是在一般编程中回答。您可以将其他类方法的构造函数应用于列表或任何其他对象,以及第二个解决方案。我有点困惑,为什么您有public ListBox lb
,但使用lb_msg
来实际添加内容?@johnyaw当时我正在试验。忘了把它拿出来。我有点困惑,为什么你有public ListBox lb
,却用lb_msg
来实际添加一些东西?@johnyaw当时我正在试验。忘了把它拿出来了。谢谢Nikhil,我会看看这个并从中学习。非常感谢!谢谢Nikhil,我会看看这个并从中学习。非常感谢!