1 Pluspunkt 0 Minuspunkte

Ich habe 3 klassen in C# die voneinander erben. 

BasicNode 
Node : BasicNode 
VariableNode : Node 

Wenn ich in Node einen Event Handler definiere, gilt der dann auch für VariableNode? Ich habe das in Node.

public virtual string Value
{
    get { return base.Value; }
    set {
        base.Value = value;
        OnValueChanged(Value);
    }
}

protected virtual void OnValueChanged(string newValue)
{
    ValueChanged?.Invoke(newValue);
}

public event Action<string> ValueChanged;

Aber wenn ich versuche das event zu subscriben wird es nicht ausgeführt.

private void MenuItemNewVariableNode_Click(object sender, EventArgs e)
{
    VariableNode variableNode = new VariableNode();
    variableNode.ValueChanged += VariableNode_ValueChanged;
    VisualScript.Manager.Instance.nodes.Add(new VariableNode());
    canvasPanel.Invalidate();
}

private void VariableNode_ValueChanged(string obj)
{
    Console.WriteLine("ZThe value has changed");
    MessageBox.Show("The value of the variable changed!");
}
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du versuchst den ValueChanged Event Handler zu abonnieren, nachdem du eine neue Instanz von VariableNode erstellt hast, aber du abonnierst den Event Handler nicht für die erstellte Instanz. Stattdessen erstellst du eine andere Instanz von VariableNode und fügst diese der VisualScript.Manager.Instance.nodes-Liste hinzu.

private void MenuItemNewVariableNode_Click(object sender, EventArgs e)
{
    VariableNode variableNode = new VariableNode();
    variableNode.ValueChanged += VariableNode_ValueChanged;

    // Hier füge die gleiche Instanz von VariableNode zur Liste hinzu
    VisualScript.Manager.Instance.nodes.Add(variableNode);

    // Hier erstellst du eine neue Instanz ohne Event Handler!
    // VisualScript.Manager.Instance.nodes.Add(new VariableNode());

    canvasPanel.Invalidate();
}
von (410 Punkte)