2015-04-12 54 views
0

我目前正在做我的家庭作业分配计划:)一切都很好,直到我坚持这个问题一段时间,我不明白为什么它不工作。总之我需要启用(如果文件存在)或者禁用某个动态按钮。我使用FileSystemWatcher和定时器来检查女巫中的某个文件夹.txt文件正在由另一个Windows应用程序窗体创建。所以我想启用按钮,如果某些文件出现在文件夹上,但我的代码不起作用。有人可以说为什么我的代码不工作或问题可能隐藏的地方?功能启用和禁用动态按钮(FileSystemWatcher)

namespace WindowsFormsApplication8 
{ 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    string[] stalnr = {"Stanliukas Nr.1","Staliukai Nr.2","Staliukai Nr.3","Staliukai Nr.4","Staliukai Nr.5","Staliukai Nr.6","Staliukai Nr.7","Staliukai Nr.8","Staliukai Nr.9","Staliukai Nr.10"}; 
    private void panel1_Paint(object sender, PaintEventArgs e) 
    { 

    } 
    Button[] staliukai = new Button[10]; 
    string dir = @"C:\Users\Roberto\Documents\Visual Studio 2013\Projects\WindowsFormsApplication6\WindowsFormsApplication6\Uzsakymai\"; 
    string flnm; 
    string fldir; 
    int StalID; 
    string[] staliukas = { "StaliukasNr1.txt", "StaliukasNr2.txt", "StaliukasNr3.txt", "StaliukasNr4.txt", "StaliukasNr5.txt", "StaliukasNr6.txt", "StaliukasNr7.txt", "StaliukasNr8.txt", "StaliukasNr9.txt", "StaliukasNr10.txt" }; 
    private void Form1_Load(object sender, EventArgs e) 
    { 

      button1.Enabled = false; 
      button2.Enabled = false; 
      button3.Enabled = false; 
      button4.Enabled = false; 
      button5.Enabled = false; 
      button6.Enabled = false; 
      button7.Enabled = false; 
      button8.Enabled = false; 
      button9.Enabled = false; 
      button10.Enabled = false; 

     //Creating dynamical buttons 

     for (int i = 0; i < 10; i++) 
      { 
        flnm = staliukas[i]; 
         fldir = dir + flnm; 
        staliukai[i] = new Button(); 
         staliukai[i].Text = stalnr[i]; 
         staliukai[i].Height = 40; 
         staliukai[i].Width = 100; 
        staliukai[i].Location = new Point(20, 50 * i + 55); 
         staliukai[i].Parent = panel1; 

     // First check if there is some files in folder 

      if (!File.Exists(fldir)) 
       { 
        staliukai[i].Enabled = false; 
       } 
       else 
       { 
        staliukai[i].Enabled = true; 
       } 

        staliukai[i].Click += staliukai_Click; 
        staliukai[i].Tag = i; 


      } 
       panel1.AutoScroll = true; 

      } 


     /*Watcher should check for changes in certain folder for file changes and new file creation and use the function to enable button*/ 


       private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e) 
      { 
       timer1.Enabled = true; 
       patikrinimas(); 
       } 
       private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e) 
       { 
       timer1.Enabled = true; 
       patikrinimas(); 

        } 

      /*Function for checking if file exists*/ 

       void patikrinimas() 
       { 
        for (int i = 0; i < 10; i++) 
       { 
         Button temp = staliukai[i]; 
         flnm = staliukas[i]; 
          fldir = dir + flnm; 
         if (!File.Exists(fldir)) 
         { 
          temp.Enabled = false; 
         } 
         else 
         { 
          temp.Enabled = true; 
          } 

         } 

         } 
+0

staliukai_Click函数在哪里? –

+1

_code无法正常工作'_对您的问题描述不够!它如何“不起作用”?什么都没发生发生错误的事情? FSWatcher是否曾经标记过任何更改?为什么一个计时器当你有一个观察者?另外:你没有在你的代码中选择非英文名称来帮助任何人。它真的很难说什么应该是什么或做什么..也尝试格式化问题,以便不需要HScrollbars .. – TaW

+0

Angus Chung:尚未使用,但它有其他目的,可以从文件中添加信息。 TaW:对于我不习惯在论坛寻求帮助的问题形成的抱歉,我会更好地尝试,并在下一次将所有内容都改为英文。 FSWatcher从工具箱添加,并定向到某个文件夹,定时器应该每隔1秒刷新一次观察者。问题是,当我在程序运行时在文件夹中添加一个文件时,它不启用按钮,只有在运行应用程序之前将文件放入文件夹时才起作用。 –

回答

1

你可以修改这些代码,然后它的工作。

1.在Form1_Load中添加fileSystemWatcher1.Path。

this.fileSystemWatcher1.Path = this.dir; 

2.设置timer1.Start()和移动patikrinimas()timer1_Tick从fileSystemWatcher1_Changed和fileSystemWatcher1_Created。

private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e) 
{ 
    timer1.Enabled = true; 
    timer1.Start(); 
    //patikrinimas(); 
} 
private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e) 
{ 
    timer1.Enabled = true; 
    timer1.Start(); 
    //patikrinimas(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    patikrinimas(); 
} 

再试一次。

+0

谢谢你,伙计很多!你救了我的一天:)现在一切正常:) –

+0

不客气,很高兴帮助你。 –