codesamples:broadcast_message_winforms
This is an old revision of the document!
Broadcasting a message to all windows in a WinForms application
All VO users know about BroadcastMessage method from SSA example to etablish a communication system between different windows (Forms).
It’s very easy to implement this in X#. It’s also more powerful.
You can use “BroacastMessage” from EVERYWHERE in your code. There is even no need to identify a particular “Sender” (oSender: NULL_OBJECT) but every opened Form can receive the message by implementing a “BroadCastMessageReceive” method
PUBLIC FUNCTION BroadCastMessage(oSender AS Form, cMessage AS STRING, oExtra AS OBJECT) AS VOID PASCAL
LOCAL aParameters AS OBJECT[]
LOCAL oFormsList AS FormCollection
LOCAL oReturnValue AS OBJECT
aParameters:= <OBJECT>{oSender,cMessage,oExtra}
oFormsList:= Application.OpenForms
FOREACH oForm AS Form IN oFormsList
oReturnValue:=Send(oForm,"BroadCastMessageReceive",aParameters)
IF oReturnValue IS LOGIC .and. ! (LOGIC)oReturnValue
//If a particular Form:BroadcastMessageReceive method returns FALSE,
//exit the loop
EXIT
ENDIF
NEXT
PUBLIC FUNCTION Send( self oObject as object, cMethod as string, aParameters as object[] ) as object
local oType as System.Type
local oReturn as object
local oInfo as MethodInfo
oType := oObject:GetType()
oReturn := null_object
oInfo := oType:GetMethod( cMethod )
if oInfo != null_object
oReturn := oInfo:Invoke( oObject, aParameters )
endif
oType := null_object
oInfo := null_object
return oReturn
Implementation example.
Class xyz inherit Form
Method xyz_FormClosed(sender AS OBJECT, e AS System.Windows.Forms.FormClosedEventArgs) AS VOID
BroadcastMessage(SELF,"xyz_FormClosed",oUsefullThingOrNULLOBJECT)
CLASS MySpecialTextBoxControl inherit Textbox
Method xx()
BroadCastMessage(SELF :FindForm(), "Hello",SELF)
CLASS abc inherit Form
Method BroadCastMessageReceive(oSender as Form,cMessage as STRING,oExtra as OBJECT) AS LOGIC
do case
case cMessage=="xyz_FormClosed"
do something
// If you are sure no other form needs this message, you can return FALSE
RETURN FALSE
Case cMessage = « Hello » .and. oExtra IS MySpecialTextBoxControl
Local oTbox := < MySpecialTextBoxControl >oExtra As MySpecialTextBoxControl
Do something
endcase
RETURN TRUE //This means the Broadcast Function will continue his loop...
Code courtesy by Guy Deprez
codesamples/broadcast_message_winforms.1528396245.txt.gz · Last modified: 2018/06/07 18:30 by wolfgangriedmann