如何将方法从form1移动到带有参数的新类文件?

时间:2016-06-30 20:33:16

标签: c# .net winforms

我创建了一个新的类文件:我想将form1中的方法DirSearch移动到这个新的类文件中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Search_Text_In_Files
{
    class Search_Engine
    {

    }
}

在form1中

void DirSearch(string rootDirectory, string filesExtension, string textToSearch, BackgroundWorker worker, DoWorkEventArgs e)
{
    List<string> filePathList = new List<string>();
    List<string> restrictedFiles = new List<string>();
    int overallfiles = 0;
    int numberoffiles = 0;
    int numberofdirs = 0;

    try
    {
        var dirs = F(textBox3.Text, 0);
        var deep = (from d in dirs
                orderby d.Item2 descending
                select d).FirstOrDefault().Item2;
        filePathList = SearchAccessibleFilesNoDistinct(rootDirectory, null).ToList();
    }
    catch (Exception err)
    {
        string ad = err.ToString();
    }
    foreach (string file in filePathList)
    {
        try
        {
            _busy.WaitOne();
            if (worker.CancellationPending == true)
            {
                e.Cancel = true;
                return;
            }
            List<MyProgress> prog = new List<MyProgress>();
            int var = File.ReadAllText(file).Contains(textToSearch) ? 1 : 0;
            overallfiles++;
            if (var == 1)
            {
                numberoffiles++;
                prog.Add(new MyProgress { Report1 = file, Report2 = numberoffiles.ToString() });
                backgroundWorker1.ReportProgress(0, prog);
            }
            numberofdirs++;
            label1.Invoke((MethodInvoker)delegate
            {
                label1.Text = numberofdirs.ToString();
                label1.Visible = true;
            });
        }
        catch (Exception)
        {
            restrictedFiles.Add(file);
            continue;
        }
    }

}

我的问题是我需要传递textBoxes或标签我应该怎么做?只需在新类中为方法添加更多textBox和label控件参数吗?

我只想安排我的form1代码。

2 个答案:

答案 0 :(得分:0)

如果您正在尝试编写一个不与您的表单(或任何其他类型的UI)耦合的类,您应该传递数据值而不是控件。这将使您的新类可重用。

答案 1 :(得分:0)

你可以做你正在描述的事情,但它不会取得多大成就。 DirSearch完全取决于表单中的控件。如果你只是将方法移动到另一个类,它仍将依赖于该形式。

此外,这些控制可能是private,这意味着您的其他课程将无法访问它们。您可以更改他们对internal的访问权限,但它根本不会为您提供任何帮助。

编写一个处理文件等细节但不直接与控件交互的类会更有意义。该类可以执行搜索并公开属性或引发指示其进度的事件,并在完成时引发事件。您的表单创建该类,告诉它要执行哪些搜索,然后通过更新其控件来响应这些事件。

另一种说法相同的方式:如果你的Search_Engine课不在表格应用程序中,你会怎么写?如果同一个类也需要在控制台应用程序中工作怎么办?写那样的课。假设类可以通信的唯一方式是它公开的属性和它引发的事件。使用Search_Engine的类完全负责确定这些事件是否或如何以某种方式传达给UI。