这不是重复,至少我不这么认为。
我有一个带有listbox
(应用程序列表)的主窗体,我想用不同的按钮做不同的事情。
我希望有一个带有不同实例的公共类来简化我的代码。
问题是我无法从此课程访问我的列表框。我不能按照通常的方式“Form1 form = new Form1();
”,我希望我的主要形式继续做其他事情。
这是代码的一部分,可以帮助您:
public class Getwindow
{
public string Check { get; set; }
public void Checkwindow()
{ foreach (string App in Form1.ListBox1) //doesn't work
//it says Form1 does not contain a definition for "ListBox1"
{if (App.Contains(Check)
{return true;}
}
public void maxwindow()
{ //otherscode here }
}
在 MainForm :
上 public partial class Form1 : Form
{
GetWindows App1 = new GetWindows();
GetWindows App2 = new GetWindows();
public string Check { get; set; }
private void Form1_Load(object sender, EventArgs e)
{ App1.Check = nameofapp1
App2.Check = nameofapp2
[...]
}
private void Checkapp1_Click(object sender, EventArgs e)
{
App1.checkwindow();
}
private void Getapp()
{//void to get all app opens and put it on the listbox}
}
我真的无法从form
获得价值。我试图将所有方法放在我的mainform中并执行Form1 App1 = new Form1()
之类的操作但是我在某些方法上遇到异常错误(不知道为什么会这样)。但我更愿意从班上打电话给我listbox
。
谢谢。
答案 0 :(得分:2)
为什么不直接将方法传递给方法:
public void Checkwindow(ListBox listBox)
{
//listBox.Items or whatever you want to do.
}
同时添加到课程中:
using System.Windows.Forms;
表格:
App1.checkwindow(ListBox1);
对我来说,更好的方法是将List<string>
从Form1
传递给方法Checkwindow()
。您不应该将您的类与控件相关联,而应与数据相关联。在Form1
:
List<string> data = new List<string>();
foreach (var item in listBox1.Items)
{
data.Add(item.ToString());
}
App1.checkwindow(data);
在你的班上:
public void Checkwindow(List<string> data)
{
foreach (string str in data)
{
// do whatever
}
}
这样,如果您因某种原因将ListBox
更改为ComboBox
,则只需更改传递数据的方式,而不是“业务逻辑”类。