User Interface / Widgets / Context Popups / Interactive Context Popup
In This Topic
Interactive Context Popup
In This Topic

NOV can show not only drop down menus, but any widget in a context fashion. The example below demonstrates how you can display an interactive popup that allows the user enter some text and if the user clicks on the <OK> button, the newly entered text is applied on the label for which we show the context popup:

Interactive Context Popup Example
Copy Code
NLabel label = new NLabel("Right click me to change my text");
label.HorizontalPlacement = ENHorizontalPlacement.Left;
label.VerticalPlacement = ENVerticalPlacement.Top;
label.Background = new NBackground(NColor.PapayaWhip);
label.Border = NBorder.CreateFilledBorder(NColor.Black);
label.BorderThickness = new NMargins(1);
label.MouseDown += new new Function<NMouseButtonEventArgs>(OnLabelMouseDown);

private void OnLabelMouseDown(NMouseButtonEventArgs arg1)
{
    // Check whether the right mose down was used
    if (arg1.Button != ENMouseButtons.Right)
        return;
 
    // Mark the event as handled
    arg1.Cancel = true;
 
    // Create the content of the popup
    NStackPanel stack = new NStackPanel();
    stack.Padding = new NMargins(5);
    NLabel label = new NLabel("New text:");
    NTextBox textBox = new NTextBox();
    textBox.PreferredWidth = 200;
    NPairBox pairBox = new NPairBox(label, textBox);
    stack.Add(pairBox);
 
    NButtonStrip buttonStrip = new NButtonStrip();
    buttonStrip.InitOKCancelButtonStrip();
    stack.Add(buttonStrip);
 
    // Create the popup window
    NPopupWindow popup = new NPopupWindow(stack);
   
    // Store the label in the tag property of the popup
    popup.Tag = args.CurrentTarget;
 
    // Subscribe to the window's closed event
    popup.Closed += new Function<NEventArgs>(OnPopupClosed);
 
    // Open the popup window in context fashion
    NPopupWindow.OpenInContext(popup, arg1.CurrentTargetNode, arg1.ScreenPosition);
}
private void OnPopupClosed(NEventArgs arg1)
{
    NPopupWindow popup = (NPopupWindow)arg1.CurrentTargetNode;
    if (popup.Result != ENWindowResult.OK)
        return;
 
    // Get the popup's text box
    NStackPanel stack = (NStackPanel)popup.Content;
    NPairBox pairBox = (NPairBox)stack[0];
    NTextBox textBox = (NTextBox)pairBox.Box2;
 
    // Update the text of the label
    NLabel label = (NLabel)popup.Tag;
    label.Text = textBox.Text;
}

See Also