2009-03-28 13 views
0

Ich habe drei Komponenten. Ein Windows Forms Control (custom made), eine Hauptklasse und eine Plugin Klasse.Dynamisch reagiert auf Ereignisse

Das Plugin generiert ein Update-Ereignis, bei dem etwas zum Steuerelement hinzugefügt werden soll. Dies könnte eine Zeichenfolge, eine Zeichenfolge mit einer URL oder ein anderes Steuerelement sein, aber möglicherweise in der Zukunft etwas anderes.

Was ist der beste Weg, um so etwas zu entwerfen?

Edit:

Ich habe ein bisschen mehr klar gewesen. Das Problem, das ich lösen möchte, ist, wie man auf einen bestimmten Gegenstand anders reagiert.

zum Beispiel: Ein Plugin kann nur etwas Text hinzufügen. Es löst ein Ereignis aus, und die Hauptklasse sollte die entsprechenden Methoden aufrufen. Ein anderes Plugin kann jedoch ein benutzerdefiniertes Steuerelement hinzufügen, sodass die Hauptklasse verschiedene Methoden aufrufen muss.

Wie kann ich den Teil definieren, in dem sich die Hauptklasse bei einem bestimmten Ereignis anders verhält?

(übrigens, nehmen Sie nicht das Wort Plugin zu literally. Im Moment sind sie nur Klassen im Projekt).

Antwort

0

Klingt ziemlich einfach. Ich würde vorschlagen, eine Schnittstelle für Ihre Plugin-Klasse zu verwenden.

interface IPlugin 
{ 
    event EventHandler PluginUpdateEvent; 
} 

Entweder Ihre Formularklasse oder Ihre Hauptklasse würde eine Sammlung oder eine Reihe von Plug-in enthalten, was auch immer die Anforderungen waren, und entdecken sie jedoch, das Sie brauchen, um - über Reflexion, Konstruktor Injektion, config-Datei, was auch immer am besten ist .

Nach dem Laden des Plugins, würden Sie sicherstellen, dass das Formular das PluginUpdateEvent für dieses Plugin abonniert hat, und fügen Sie einen Ereignishandler hinzu, um das Ereignis anzugehen und dem Formular das Notwendige hinzuzufügen.

0

Verwendung Model-View-Control-Design-Muster und in Ihre Ansichten callBackFunctions passieren wollen, um sie auszuführen. sehen:

-- the code is in LUA 
-- **** I create an answerBox, and when user tap this answerBox I want to print->"test" 

local answerBox = require "view.answerBox" 
local test = answerBox:new() 
test.init("text for your answerBox", "1", function() print "answerBox was tapped by the user" end) 

und in answerBox Klasse bekomme ich die Funktion und nennen es, wenn das Objekt abgegriffen wird:

-- constructor 
function new(self, message, id, callBackFunction, obj) 
    function callBackFunction(event)    
     callBackFunction(event) 
    end 
    obj.answerBox:addEventListener("tap", callBackFunction) 
end 

Seien Sie vorsichtig, wenn Sie diese Struktur verwenden. In dieser Struktur befindet sich die answerBox-Klasse in View und die CallBackFunction befindet sich im Controller. Sie können sogar eine Logik aus Ihrem Modell anstelle von function() print "test" end

hoffe, dies hilft. ;)

Verwandte Themen