c# - 自定义控件上的单击事件未触发(从包含表单分配的事件)

标签 c# .net winforms treeview

我有以下控件,上面只有一个 TreeView 和 ToolStrip:

public partial class MyTreeView : UserControl
{
    private string _nodeName;
    public string NodeName { get { return _nodeName;} }

    public MyTreeView()
    {
        InitializeComponent();
    }

    private void trv_AfterSelect(object sender, TreeViewEventArgs e)
    {
        if (e.Node == null || e.Node.Parent == null || e.Node.Parent.Parent == null)
            return;

        nodeName = e.Node.Parent.Parent.Text + @"\" + e.Node.Parent.Text + @"\" + e.Node.Text;
    }

}

然后在包含 MyTreeView 实例的主窗体中,我尝试在其中添加一个 Click 事件:

    private void mtv_Click(object sender, EventArgs e)
    {
        MessageBox.Show(mtv.NodeName.ToString());
    }

AfterSelect 事件触发并且 nodeName 包含预期值,但 Click 未触发。

最终,当 TreeView 选择更改时,我将加载一个文件并在文本框中显示其内容,但我不知道如何“通知”表单自定义控件上发生的选择更改。

最佳答案

试试这个

public partial class MyTreeView : UserControl
{
    public delegate void ValueSelectedHandler(object sender, EventArgs e, string value);
    public event ValueSelectedHandler OnValueSelected;
    private string _nodeName;
    public string NodeName { get { return _nodeName;} }

    public MyTreeView()
    {
        InitializeComponent();
    }

    private void trv_AfterSelect(object sender, TreeViewEventArgs e)
    {
        if (e.Node == null || e.Node.Parent == null || e.Node.Parent.Parent == null)
            return;

        nodeName = e.Node.Parent.Parent.Text + @"\" + e.Node.Parent.Text + @"\" + e.Node.Text;
        if(OnValueSelected!=null)
        {
            OnValueSelected(sender, e, nodeName);
        }
    }    
}

现在在你的表单中

public Form1()
{
    InitializeComponent();
    myTreeView1.OnValueSelected += ValueSelected;
}
private void ValueSelected(object sender, EventArgs e, string value)
{
    MessageBox.Show(value);
}

关于c# - 自定义控件上的单击事件未触发(从包含表单分配的事件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31942335/

相关文章:

c# - IdentityDbContext 不从我的数据库初始值设定项调用种子方法

c# - 如何在这样一个简单的字符串中分别获取整数和字符?

c# - 在 Windows 窗体中选择和更新数据表

c# - 如何在不停止的情况下在另一个异步方法中创建调用异步方法

c# - 如何从字符串中去掉反斜杠 ("\") 字符

c# - Autofac.WebApi2 全局操作过滤器注入(inject)失败

.net - SQLite 与 Microsoft Access MDB 相比有多快?

c# - 异步更新文本框

c# - 按标签查找 DataGridView 项目(行)

c# - 更改样式中的 setter 值