为什么文本框点击事件未触发

时间:2014-06-05 13:41:18

标签: c# winforms events

我有一个文本框,它是只读的。当我点击时,我想让它调用我的按钮点击事件:

private void tbFile_Click(object sender, EventArgs e)
{
    //btnBrowse_Click(sender, e);
    MessageBox.Show("test");
}

单击文本框时,没有任何反应。我该如何解决?

更新

private void btnBrowse_Click(object sender, EventArgs e)
{
    openFile();
}

private void tbFile_Click(object sender, EventArgs e)
{
    //btnBrowse_Click(sender, e);
    if (tbFile.Text != "")
    {
        openFile();
    }
}

public void openFile()
{
    var FD = new System.Windows.Forms.OpenFileDialog();
    FD.Filter = "DBF Files|*.DBF";
    FD.InitialDirectory = @"C:\";

    if (FD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        string fileToOpen = FD.FileName;
        tbFile.Text = fileToOpen;
    }
}

当我点击浏览按钮并选择文件时,浏览文件窗口再次出现。所以现在它出现了两次,文本框点击仍然无效。

3 个答案:

答案 0 :(得分:6)

没有理由可以从您提供的信息中推断为什么在单击tbFile控件时不应该触发openFile()方法。

文本框设置为只读阻止它以任何方式提升点击事件。

唯一的可能性是该方法未分配给控件的click事件。

在控件的事件属性中确保click事件确实已分配给“tbFile_Click”方法。

只是因为存在一个被称为与控件相同但添加了“_Click”的方法并不会使它被执行,除非您明确告诉c#您想要将该方法与控件的click事件相关联。

当您通过事件窗口分配方法时,C#会在幕后生成一个代码文件,用于将回调添加到该特定事件。

答案 1 :(得分:2)

您应该使用btnBrowse.PerformClick()方法来模拟用户点击,而不是调用处理程序。

答案 2 :(得分:0)

我从VS 2013获得的默认值是' MouseClick'功能,所以这工作:

    private void btnBrowse_Click(object sender, EventArgs e)
    {     
        MyAwesomeFunction(sender);
    }

    private void tbFile_MouseClick(object sender, MouseEventArgs e)
    {     
        MyAwesomeFunction(sender);
    }

    private void MyAwesomeFunction(object sender)
    {
        MessageBox.Show("test");
    }