Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IF-ELSE循环中的按钮单击事件_C#_Visual Studio 2010_C# 4.0_Visual Studio 2012 - Fatal编程技术网

C# IF-ELSE循环中的按钮单击事件

C# IF-ELSE循环中的按钮单击事件,c#,visual-studio-2010,c#-4.0,visual-studio-2012,C#,Visual Studio 2010,C# 4.0,Visual Studio 2012,如果条件(“file.length()您不能将eventhandler放入IF语句中,但可以触发BUTTON CLICK,则我希望触发BUTTON_CLICK事件。请将IF语句修改为 if(flag==1) { button1.PerformClick(); } 另外,所有抛出错误的代码都直接在类中,它们应该在方法中。请将代码修改为 private void CheckFile() { FileInfo info = new FileInfo("c:\\test.txt");

如果条件(“file.length()您不能将eventhandler放入IF语句中,但可以触发BUTTON CLICK,则我希望触发BUTTON_CLICK事件。请将IF语句修改为

if(flag==1)
{
    button1.PerformClick();
}
另外,所有抛出错误的代码都直接在类中,它们应该在方法中。请将代码修改为

private void CheckFile()
{
    FileInfo info = new FileInfo("c:\\test.txt");
        if (info.Length > 0) 
             flag=1;

    if(flag==1)
    {
        button1.PerformClick();
    }
}

然后,您可以在需要检查文件中数据大小是否大于0的任何位置调用
CheckFile();

Method1

button1.PerformClick();
方法2

this.button1.Click += new EventHandler(button1_Click);
这个

这个密码呢

if(flag==1) //similar error for flag as for info
{

}
将引发编译时错误,这是类方法的代码,而不是类本身

.c#类基本上只能包含方法、属性、字段、事件、委托和嵌套类

所以你的班级应该是这样的:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        button1.Click += button1_Click;
    }     

    private void button1_Click(object sender, EventArgs e)
    {
        FileInfo info = new FileInfo("c:\\test.txt");
        if (info.Length > 0)  
        {           
            //Code for Redirection to New Form
        }
    }
}

不能将if-else语句放入类中,可以将其放入方法中。请尝试以下操作:

  private void button1_Click(object sender, EventArgs e)
  {
     FileInfo info = new FileInfo("c:\\test.txt");
     if (info.Length > 0)  flag = 1;                         
     if(flag==1)
     {
            //Code for Redirection to New Form
     }
  }

您的代码不可编译。原因如下:

  • 这些条件必须放在某种方法中
  • 事件处理程序的声明必须从条件范围中移出
  • 以下是可行的代码:

    namespace WindowsFormsApplication1
    {
    
        public partial class Form1 : Form
        {
            private  int flag;
            FileSystemWatcher watcher = new FileSystemWatcher();
    
            public Form1()
            {
                InitializeComponent();
                watcher.Path = @"C:\";
                watcher.Filter = "test.txt";
                watcher.Changed += watcher_Changed;
                watcher.EnableRaisingEvents = true;
            }
    
            private void SetFlag()
            {
                FileInfo info = new FileInfo("c:\\test.txt");
                    if (info.Length > 0)  
                        flag= 1;
            }
    
            private void CheckFlag()
            {
                if(flag==1)
                {
                    button1.PerformClick();
                }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //Code for Redirection to New Form
            }            
    
            void watcher_Changed(object sender, FileSystemEventArgs e)
            {
                SetFlag();
                CheckFlag();
            }
        }
    }
    
    现在您可以调用方法
    SetFlag()
    来设置标志,并使用方法
    CheckFlag()
    来检查标志。 在本例中,我使用
    FileSystemWatcher
    捕获所有文件更改,并在事件
    Changed
    的处理程序内调用
    SetFlag()
    CheckFlag()


    您可以使用
    button1\u单击来代替
    button1.PerformClick()
    (此为EventArgs.Empty)

    为什么你不能在
    按钮1_Click
    中选中标志?我不是想说得太刺耳,但似乎你需要参考一些C#中经典编程的入门教程。我认为你试图做的事情是根本不可能的。也就是说,有其他方法来做上述事情,但你的谢谢你,克里斯托弗。是的,我是新手。当然,我会考虑你的输入。谢谢。这是非常有用的。我也这么做了。我创建了一个主方法,并尝试调用每一个方法如下::私人无效按钮1点击(对象发送者,EngEngsE){MeaseBox。文件长度>0“;}public static void main(String[]args){Form1 f=new Form1();f.SetFlag();f.CheckFlag();}但不知何故它不起作用。我没有收到消息框。我检查了文件,它工作正常。您确定文件“test.txt"不是空的?您确定为事件按钮1添加了处理程序吗?单击?有两种方法可以添加事件处理程序:1.使用表单设计器2.手动将此代码添加到表单1构造函数中:
    button1.Click+=button1\u Click;
    现在您可以将带有消息框的代码放入方法
    button1\u Click
    我在c中做了一些更改ode示例。您可以检查它。它现在应该可以正常工作了。您好,@KandarpJoshi,加载表单时会出现
    Load
    事件。但我想您需要在表单加载完成后执行操作。您可以尝试将操作附加到
    Activate
    事件,但这并不好,因为此事件将在每次加载后发生告诉我何时激活窗体。另一个决定是尝试使用
    计时器
    。这将允许您周期性地执行操作。我在主函数中调用了“formObject.CheckFile();”方法,但该方法不起作用。按钮单击事件未触发。我还尝试了按钮单击调用的其他选项。
      private void button1_Click(object sender, EventArgs e)
      {
         FileInfo info = new FileInfo("c:\\test.txt");
         if (info.Length > 0)  flag = 1;                         
         if(flag==1)
         {
                //Code for Redirection to New Form
         }
      }
    
    namespace WindowsFormsApplication1
    {
    
        public partial class Form1 : Form
        {
            private  int flag;
            FileSystemWatcher watcher = new FileSystemWatcher();
    
            public Form1()
            {
                InitializeComponent();
                watcher.Path = @"C:\";
                watcher.Filter = "test.txt";
                watcher.Changed += watcher_Changed;
                watcher.EnableRaisingEvents = true;
            }
    
            private void SetFlag()
            {
                FileInfo info = new FileInfo("c:\\test.txt");
                    if (info.Length > 0)  
                        flag= 1;
            }
    
            private void CheckFlag()
            {
                if(flag==1)
                {
                    button1.PerformClick();
                }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //Code for Redirection to New Form
            }            
    
            void watcher_Changed(object sender, FileSystemEventArgs e)
            {
                SetFlag();
                CheckFlag();
            }
        }
    }