ich stehe vor folgendem Problem:
Ich möchte, wenn ein bestimmter Text eingegeben wird, eine dazugehörige Funktion aufrufen.
Dazu habe ich mir ein Array mit den regulären Ausdrücken erstellt (z.B. ("/testbefehl (.*)")) sowie ein Array des Typen System.Threading.ParameterizedThreadStart mit den zugehörigen Funktionspointern.
Das Problem, welches auftritt, ist die Meldung, dass die Funktionen statisch sein müssten:
Fehler |
Ein Feldinitialisierer kann nicht auf das nicht statische Feld bzw. die nicht statische Methode oder Eigenschaft "LeeresCS.Form1.funcTest(object)" verweisen |
Code dazu etwa so (nach dem Muster short but complete):
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace LeeresCS
{
public partial class Form1 : Form
{
private string randomText = "Beispielsvariable, die in Funktionen benutzt werden soll.";
private string[] cmds = new string[] { "/test (.*)" };
private System.Threading.ParameterizedThreadStart[] cmd_funcs = { funcTest };
private void funcTest(object data)
{
Match myMatch = (Match)data;
MessageBox.Show(randomText+" und "+myMatch.Groups[1].Value);
testTimer.Enabled = false;
}
}
}
Alles klar. Mein nächster Gedanke war es dann, die Funktion statisch zu machen.
Dabei stellte sich das Problem heraus, dass ich die Variable randomText nicht mehr lesen sowie auf den Timer testTimer nicht mehr zugreifen konnte.
Das Problem mit der Variable könnte ich umgehen, indem ich sie ebenfalls statisch mache.
Nur würde dabei der Zugriff auf den Timer weiterhin fehlen.
Mein Ziel ist es, flexibel die Funktionen aus dem Array aufrufen zu können (gerne auch, ohne in jeder Funktion nochmal das Argument casten zu müssen), und dennoch in ihnen selbst Zugriff auf die Variablen der Klasse sowie die Form-Elemente zu besitzen.
Könnt ihr, die myCSharp-Community, mir bei meinem Problem helfen und habt einen Ansatz, an dem ich weiterarbeiten kann?
Ich bin seit gestern dabei, von VB.NET auf C# umzusteigen (da mir die Syntax eher zusagt, unter Anderem auch aufgrund der anderen Sprachen, die ich beherrsche) und an dieser Stelle hapert es leider noch ein wenig.
Viele Grüße