【问题标题】:Get Main form's listbox from an another class从另一个类获取主窗体列表框
【发布时间】:2016-07-20 09:20:51
【问题描述】:

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

我有一个带有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 获得价值。我试图将所有方法放在我的主窗体中并执行Form1 App1 = new Form1() 之类的操作,但在某些方法上出现异常错误(虽然不知道为什么)。但我更愿意在课堂上打电话给我的listbox

谢谢。

【问题讨论】:

  • 您是否尝试过在您的GetWindows() 方法中接受ListBox 类型作为参数(例如GetWindows(ListBox sender) { ... })?然后,当您从表单调用它时,您可以将ListBox(从表单本身)传递给该方法。这将允许您访问实际表单的ListBox1
  • 您的GetWindows() 方法实际用于什么目的?您希望如何处理来自 ListBox1 的数据?
  • 是的,这确实很聪明。我在 c# 上很新。我会点那个!! Listbox1 Data 是 windows 上打开的应用程序的列表,getwindow 帮助我动态打开它们(我发送点击和键盘快捷键)

标签: c# .net winforms


【解决方案1】:

你为什么不把它需要的一切都传递给方法:

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

【讨论】:

  • 包装参数列表的好主意,以帮助可重用代码:)
  • 好的,我会将我的数据从我的列表框传递到列表!谢谢你的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多