gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:47 25 4
gpt4 key购买 nike

我有以下控件,上面只有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com