从另一个班级

时间:2016-07-20 09:20:51

标签: c# .net winforms

这不是重复,至少我不这么认为。

我有一个带有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

谢谢。

1 个答案:

答案 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,则只需更改传递数据的方式,而不是“业务逻辑”类。