ListView&的问题文件输出

时间:2010-06-22 20:29:31

标签: c# winforms listview

我的项目有很多问题,我真的不知道从哪里开始。首先,我得到一个错误“非静态字段,方法或属性需要一个对象引用”。它强调了retPath(行:DriveRecursion_results.DriveRecursion(retPath);)。我不知道如何解决这个问题。

我仍然难以理解的另一件事是如何在我的Windows窗体上填充列表视图。我想要的是需要重命名的文件列表(相对于我列表中所有文件的列表。)

有人可以帮忙吗?我现在几个小时一直苦苦挣扎。

这是我的代码:

Form1.cs中:

namespace FileMigration
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        FolderSelect("Please select:");
    }
    public string FolderSelect(string txtPrompt)
    {
        //Value to be returned
        string result = string.Empty;

        //Now, we want to use the path information to population our folder selection initial location
        string initialCheckoutPathDir = (@"C:\");
        System.IO.DirectoryInfo info = new System.IO.DirectoryInfo(initialCheckoutPathDir);
        FolderBrowserDialog FolderSelect = new FolderBrowserDialog();
        FolderSelect.SelectedPath = info.FullName;
        FolderSelect.Description = txtPrompt;
        FolderSelect.ShowNewFolderButton = true;

        if (FolderSelect.ShowDialog() == DialogResult.OK)
        {
            string retPath = FolderSelect.SelectedPath;
            if (retPath == null)
            {
                retPath = "";
              }
            DriveRecursion_Results ds = new DriveRecursion_Results();
           ds(retPath);
            result = retPath;
            //Close this form.

        } 
        return result;
    }



   }
}

这是DriveRecursion_Results.cs:

namespace FileMigration
{
public partial class DriveRecursion_Results : Form
{
    public DriveRecursion_Results()
    {
        InitializeComponent();
    }

    private void fileOutput_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    public void DriveRecursion(string retPath)
    {

       // string[] files = Directory.GetFiles(retPath, "*.*", SearchOption.AllDirectories);

        string pattern = " *[\\~#%&*{}/<>?|\"-]+ *";
        string replacement = "";
        Regex regEx = new Regex(pattern);

        string[] fileDrive = Directory.GetFiles(retPath, "*.*", SearchOption.AllDirectories);
        List<string> filePath = new List<string>();

        foreach (string fileNames in fileDrive)
        {
            if (regEx.IsMatch(fileNames))
            {
                filePath.Add(fileNames);
                //I tried adding my listview (fileOptions) here but I cannot for some reason
            }
        }

        }





        }




    }

真的很感激任何帮助:(有没有人对如何更改我的代码有任何想法,所以它实际上有效?

3 个答案:

答案 0 :(得分:2)

问题1:您的功能是静态的。如果它不再存在,这将有效。这是因为静态函数没有这个隐藏的'this'参数 - 对它所作用的对象的引用。因此,它只能访问静态数据成员,而不是常规成员。

答案 1 :(得分:2)

您无法从该级别将项目添加到列表视图,因为列表视图是非静态的,方法DriveRecursion是静态的。我首先将DriveRecursion方法更改为非静态方法或返回文件路径列表。

答案 2 :(得分:0)

您无法将项目添加到列表视图中,因为您尝试从静态方法添加它们。

由于它是静态的,因此没有ListView因为实际上没有Form来添加内容。您需要使DriveRecursion()不是静态的,才能将内容添加到ListView

此外,当您DriveRecursion()不是静态时,您需要一种方法让Form1知道要填充哪个DriveRecursion_Results类。

您可以采取的另一种方法是Form1retPath返回DriveRecursion_Results

修改

删除了原始答案的无关部分

我已经完全按照您发布的方式复制了您的代码。然后对Form1.cs中的FolderSelect()进行了以下更改:当我运行此代码时。我可以弹出第二个窗口,但不能关闭其他窗口,因为这会导致应用程序退出。

请确保你有ds.Show()并在某些时候调用ds.DriveRecursion(retPath)

Form1.cs中的Modified FolderSelect(string):

    private void FolderSelect( string txtPrompt )
    {
        //Value to be returned
        string result = string.Empty;

        //Now, we want to use the path information to population our folder selection initial location
        string initialCheckoutPathDir = ( "C:\\" );
        System.IO.DirectoryInfo info = new System.IO.DirectoryInfo( initialCheckoutPathDir );
        FolderBrowserDialog FolderSelect = new FolderBrowserDialog();
        FolderSelect.SelectedPath = info.FullName;
        FolderSelect.Description = txtPrompt;
        FolderSelect.ShowNewFolderButton = true;

        if( FolderSelect.ShowDialog() == DialogResult.OK )
        {
            string retPath = FolderSelect.SelectedPath;
            if( retPath == null )
            {
                retPath = "";
            }
            DriveRecursion_Results ds = new DriveRecursion_Results();
            ds.DriveRecursion( retPath );
            ds.Show();
            result = retPath;
            //Close this form.

        }
        return;
    }