Difference between revisions of "Method make delegate"
From Ribbon Commander Documentation
(→C#) |
(→VB.NET) |
||
Line 108: | Line 108: | ||
=== VB.NET === | === VB.NET === | ||
<syntaxhighlight lang="vb" line> | <syntaxhighlight lang="vb" line> | ||
+ | |||
+ | Public Sub New() | ||
+ | _customUI = rxCustomUI.create("my_vb_context") | ||
+ | With _customUI | ||
+ | .clear() | ||
+ | With .ribbon.tabs.add(New rxTab) | ||
+ | .label = "rxDropDownRegular - DELEGATES TESTS" | ||
+ | With .groups.add(New rxGroup) | ||
+ | .label = "My Group" | ||
+ | |||
+ | ' Add a new drop-down to the group | ||
+ | With .dropDowns.add(New rxDropDownRegular) | ||
+ | |||
+ | ' Add a few items and buttons to the drop-down | ||
+ | .items.add(New rxItem).label = "DummyItem1" | ||
+ | .items.add(New rxItem).label = "DummyItem2" | ||
+ | .buttons.add(New rxButtonRegular).label = "DummyButton1" | ||
+ | .buttons.add(New rxButtonRegular).label = "DummyButton2" | ||
+ | |||
+ | ' Register an 'onAction' callback | ||
+ | .onAction = _customUI.make_delegate(New rxDropDownRegularDelegates.onAction(AddressOf OnAction)) | ||
+ | End With | ||
+ | End With | ||
+ | End With | ||
+ | |||
+ | .refresh() | ||
+ | End With | ||
+ | End Sub | ||
+ | |||
+ | ' The callback stub | ||
+ | Private Sub OnAction(control As LogismiX.Interop.DynamicRibbonX.IRibbonControl, ByRef itemID As String, itemIndex As Integer) | ||
+ | System.Diagnostics.Debug.Print("OnAction() called...") | ||
+ | |||
+ | Dim sLabel As String = vbNullString | ||
+ | |||
+ | Dim item As rxItem = _customUI.ribbonXControls.getItemIfExists(itemID) | ||
+ | If Not (item Is Nothing) Then | ||
+ | sLabel = item.label | ||
+ | End If | ||
+ | |||
+ | MsgBox("Item with label=[" & IIf(Len(sLabel) > 0, sLabel, "[unknown]") & "] and index=[" & itemIndex & "] clicked.") | ||
+ | End Sub | ||
+ | |||
+ | End Class | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 17:09, 14 March 2013
Contents
Description
Creates a new rxDelegate object associated to a callback function and owned by the rxCustomUI instance.
Parameters
rxCustomUI.make_delegate(string) -> rxDelegate
Parameter Name
|
Parameter Type
|
Default Value
|
Description
|
methodName | string | [none] | The name of the target callback function |
return | rxDelegate | [none] | The newly created rxDelegate |
rxCustomUI.make_delegate(Delegate) -> rxDelegate
Parameter Name
|
Parameter Type
|
Default Value
|
Description
|
callbackDelegate | Delegate | [none] | An instance of a .NET delegate used to dispatch the callback |
return | rxDelegate | [none] | The newly created rxDelegate |
Remarks
- (VBA-specific) If the rxCustomUI object has global dispatch scope, the target function needs to be a global member of a standard VBA module
- Otherwise the target function needs to be a public method of the object used as the rxCustomUI's dispatch object.
- (.NET-specific) By using the second method override, Native .NET delegates can be used to instantiate rxDelegate objects. There is a [control name]Delegates class for every Dynamic RibbonX control in namespace LogismiX.DynamicRibbonX.Core that specifies the callback signature of every callback (see Examples).
Examples
VBA
Public Sub MakeDelegateTest()
' Create a new rxCustomUI with global dispatch scope
Dim myCustomUI As rxCustomUI
Set myCustomUI = rxCustomUI.Create("my_custom_context", , DispatchScope_global)
With myCustomUI
' Clear old state
.Clear
' Add new tab and label it 'My Tab'
With .ribbon.tabs.Add(New rxTab)
.Label = "My Tab"
' Add new group and label it 'My Group'
With .groups.Add(New rxGroup)
' Add a new button and label it 'Click Me!'
Dim myButton As rxButton
Set myButton = .Buttons.Add(New rxButton)
myButton.Label = "Click Me!"
' Add a delegate that dispatches to a function with name 'MyCallbackFunc'
myButton.OnAction = myCustomUI.make_delegate("MyCallbackFunc")
End With
End With
'Render the UI
.Refresh
End With
End Sub
' The callback stub
Public Sub MyCallbackFunc(ByVal control As DynamicRibbonX.IRibbonControl)
MsgBox "Button clicked!"
End Sub
See also: Creating our first button in VBA
C#
class rxBackstageEditBox_delegates_tests
{
private rxCustomUI _customUI;
// ctor
public rxBackstageEditBox_delegates_tests()
{
_customUI = rxCustomUI.create("my_cs_context");
_customUI.clear();
_customUI.backstage.tabs.add(new rxBackstageTab
{
label = "rxBackstageEditBox - DELEGATES TESTS"
})
.firstColumn.groups.add(new rxBackstageGroup
{
label = "rxBackstageEditBox test group"
})
.topItems.editBoxes.add(new rxBackstageEditBox
{
onChange = _customUI.make_delegate(new rxBackstageEditBoxDelegates.onChange(OnChange))
});
_customUI.refresh();
}
// The callback stub
private void OnChange(IRibbonControl control, string text)
{
System.Diagnostics.Debug.WriteLine("OnChange() called...");
MessageBox.Show("Text change :[" + text + "]");
}
}
VB.NET
Public Sub New()
_customUI = rxCustomUI.create("my_vb_context")
With _customUI
.clear()
With .ribbon.tabs.add(New rxTab)
.label = "rxDropDownRegular - DELEGATES TESTS"
With .groups.add(New rxGroup)
.label = "My Group"
' Add a new drop-down to the group
With .dropDowns.add(New rxDropDownRegular)
' Add a few items and buttons to the drop-down
.items.add(New rxItem).label = "DummyItem1"
.items.add(New rxItem).label = "DummyItem2"
.buttons.add(New rxButtonRegular).label = "DummyButton1"
.buttons.add(New rxButtonRegular).label = "DummyButton2"
' Register an 'onAction' callback
.onAction = _customUI.make_delegate(New rxDropDownRegularDelegates.onAction(AddressOf OnAction))
End With
End With
End With
.refresh()
End With
End Sub
' The callback stub
Private Sub OnAction(control As LogismiX.Interop.DynamicRibbonX.IRibbonControl, ByRef itemID As String, itemIndex As Integer)
System.Diagnostics.Debug.Print("OnAction() called...")
Dim sLabel As String = vbNullString
Dim item As rxItem = _customUI.ribbonXControls.getItemIfExists(itemID)
If Not (item Is Nothing) Then
sLabel = item.label
End If
MsgBox("Item with label=[" & IIf(Len(sLabel) > 0, sLabel, "[unknown]") & "] and index=[" & itemIndex & "] clicked.")
End Sub
End Class