除非通过单击按钮调用,否则为什么我的方法不起作用?

时间:2013-02-13 12:51:28

标签: c#

我昨天发布了这个问题,但我认为我没有提供足够的信息来获得明确的答案。所以这里再添加一些代码,希望能让事情变得更加清晰。

我有一个带有listView的表单,它通过调用showCheckedInFiles()方法填充。当我向表单添加一个简单的按钮并按下它时,该方法可以正常工作,这会调用方法,但是当我从其他地方调用该方法时,它将不会填充我的listview。

请帮助它让我疯了。下面的第一个方法是从另一个类中调用的,它显示在下面,我已经包含了按钮方法以供参考,正如我所说,按钮工作完美,但我需要能够在不单击的情况下调用方法一个按钮!!:

public void openProject(string projectname)
{
    projectName = projectname;
    string userDir = CSDBpath + projectname + "\\checkedOUT\\" + userName;
    if (!Directory.Exists(userDir)) //Does the user's directory exist, if not, create it
    {
        Directory.CreateDirectory(userDir);
    }
    showCheckedInFiles();
 }

 private void button3_Click(object sender, EventArgs e)
 {
    showCheckedInFiles();
 }

调用上述方法的方法:

private void buttonOpenProject_Click(object sender, EventArgs e)
{
     ListView.SelectedListViewItemCollection mySelectedItems;
     mySelectedItems = listView1.SelectedItems;
     Form1 mainform = new Form1();
     string myProject = "";

     foreach (ListViewItem item in mySelectedItems)
     {
         myProject = item.Text;
     }

     mainform.openProject(myProject);
     //mainform.showCheckedInFiles();
     this.Close();
 }

这是实际的showCheckedInFiles()方法,它不会构建我的listView,除非从button_3_click方法调用....这是我不想要的!

public void showCheckedInFiles() // ListView1 - load the DMs into the listView to create the list
        {
            listView1.Items.Clear(); // this clears the list of files each time the method is called preventing the list from being duplicated over and over - (refreshes it) !!
            string[] checkedINfileList = Directory.GetFiles(CSDBpath + projectName, "*.sgm", SearchOption.AllDirectories); //JAKE I'VE ADDED THE EXTRA ARGUMENTS HERE and removed \\CheckedIN, MAY NEED TO DELETE FROM .SGM ETC


            foreach (string file in checkedINfileList)
            {


                ListViewItem itemName = list1.getName(file); // get this information from the files in the array
                long itemSize = list1.getSize(file);
                DateTime itemModified = list1.getDate(file);


                listView1.Items.Add(itemName);          // now use that information to populate the listview
                itemName.SubItems.Add(itemSize.ToString() + " Kb");
                itemName.SubItems.Add(itemModified.ToString());


                // readFromCSV(); //Reads the data to the CSV file using the method


                //  // StringBuilder sb = ReadingListView(); //writes the data to the CSV file
                //  // fileWrite.writeToCSV(sb);
                showStatus(itemName);


            }
            showMyCheckedOutFiles();

        }

2 个答案:

答案 0 :(得分:2)

可能是showCheckedInFiles失败的原因不是由于它未被调用的地方,而是由于它被调用的地方。您可以告诉我们更多相关信息。

与此同时,我的猜测是你在创建listView的句柄之前调用它(所以列表还没有真正存在),或者你正在调用另一个线程(但你最好在这种情况下可能会看到例外情况。)

答案 1 :(得分:0)

buttonOpenProject_Click()似乎没有调用任何内容来显示它创建的主窗体。我看不出你能看到它的任何方式!