I'm instanciating buttons via script and need then to call a script in a parent object a few levels up
This is in the prefab script and gets called when one of the buttons gets clicked. Performance isn't relevant at all, so I just told it to go from the bottom up until it reaches the controller game object that has the mllhildTestController.cs script attached.
public void ClickMe()
{
    string parentNode = ReturnLabel();
    string path = this.GetComponentInParent<mllhildTestController>().path;
    this.GetComponentInParent<mllhildTestController>().Clear();
    this.GetComponentInParent<mllhildTestController>().Load(path, parentNode);
}
but it only results in an error
NullReferenceException: Object reference not set to an instance of an object
this.something is working fine, so it has to be an error in my logic with the GetComponentInParent<mllhildTestController>() part.
Could someone please help me?
EDIT: this function seems to work fine, but since it was asked
public string ReturnLabel()
{
    return buttonText.text;
}
Controller script
public class mllhildTestController : MonoBehaviour
{
    public mllhildTestLinq linq;
    public mllhildTestDisplay display;
    public mllhildTestButtons buttons;
    public List<GameObject> listToStuff;
    public string test = "smName";
    public string smName = "mllhild";
    public string displayText = "display.textWindow.font";
    public string path = @"C:\SlaveMaker4\Slaves\";
    // Start is called before the first frame update
    void Start()
    {
        ClearText();
        // linq.LinqTest(@"C:\SlaveMaker4\Rhia.xml");
        // string filename = @"C:\SlaveMaker4\Rhia.xml";
        // linq.QueryXML(filename, parentNode);
        // Debug.Log(this.GetType().GetField("test").GetValue(this));
        // Debug.Log(this.GetType().GetField(test).GetValue(this));
        // Debug.Log(display.textWindow.font);
        // Debug.Log(this.GetType().GetField("display").GetType().GetField("textWindow").GetType().GetField("font").GetValue(this));
        // Debug.Log(typeof(TextMeshProUGUI).GetProperty(displayText).GetValue(this));
        // Debug.Log(this.GetType().GetField(displayText).GetValue(this));
    }
    // Update is called once per frame
    void Update()
    {
    }
    public void SetText(string text)
    {
        display.textWindow.text = text;
    }
    public void AddText(string text)
    {
        display.textWindow.text += text;
    }
    public void ClearText()
    {
        display.textWindow.text = null;
    }
    public GameObject bfield;
    public GameObject AddNewButtonList(string label)
    {
         GameObject b = Instantiate(bfield) as GameObject;
         b.SetActive(true);
         b.GetComponent<PrefabListButtoms>().title.text = label;
         b.transform.SetParent(bfield.transform.parent, false);
         return b;
    }
    public void Clear()
    {
        foreach(GameObject b in listToStuff)
        {
            Destroy(b);
        }
        listToStuff.Clear();
    }
    public void LoadButton() { Load(path, "Language" ); }
    public void Load(string path, string parentNode)
    {
        string[] fileArray = Directory.GetFiles(path, "*.xml");
        foreach (string xmlfile in fileArray)
        {
            GameObject blist = AddNewButtonList(xmlfile + "\n" + parentNode);
            listToStuff.Add(blist);
            //AddText("\n\n" + xmlfile + "\n");
            //AddText("Parent-Node:" + parentNode + "\n");
            //AddText("Child-Nodes:" + "\n");
            linq.QueryXML(xmlfile, parentNode, blist);
        }
    }
}
 
     
    