Telerik Forums
UI for WinForms Forum
1 answer
273 views
In the new version of the WinForms controls (2013.3.1016.40) opening a context menu will cause the form to loose focus and flash.

This also makes the context menu not close all the time on the first click away form the menu since the form regains focus on the first click and then registers the click away on the second click.

This seems to be happening on all controls even when using the default context menu like in the grid view.
George
Telerik team
 answered on 25 Oct 2013
1 answer
123 views
1. Click on a combo property to start edit
2. Move mouse over vertical center dividing line to get mouse to transition to resize pointer
3. Move moue to the right back over the combo box that has been activated for edit
4. The mouse pointer will not transition back to the arrow, it will stay on the resize pointer

I have attached an image of this.
Dimitar
Telerik team
 answered on 25 Oct 2013
3 answers
166 views
#1
How can I configure radDateTimePicker to allow any type of input so I can parse the input into a valid date (or set to null if invalid)?

Examples:

- Users want to be able to key in 7 (today's day part) and have the date parsing assume current month and year => 08/07/2013;

- Key in 9/7 ... date parsing will assume current year => 09/07/2013;

I will write the parsing rules ... but how can I configure the control to accept text only ... without the '/' and without trying to format as a date while the user is typing?


#2
How can I make the control (and all other Telerik controls) look like the rest of the controls on my form?  I am using Win7 ... but others may be on Win8 or Vista.

#3
How can I make the control not nullable - so a date must be entered?

Dess | Tech Support Engineer, Principal
Telerik team
 answered on 25 Oct 2013
1 answer
463 views
Hello,

I have a solution (see example below) how to use RadMultiColumnComboBox auto filter and it's EditorControl's column filters enabled at the same time. Howewer, there is a problem and I'd be glad if you have any solution.

I've attached a picture of working and non working example of filtering.

Filtering as shown on page http://www.telerik.com/help/winforms/multicolumncombobox-filtering.html is not enaugh for what I am trying to do.
My goal is to have RadMultiColumnComboBox auto filtering and also it's EditorControl columns filtering enabled at the same time.
This example shows how to solve this. But it only works when manipulating with short strings in the RadMultiColumnCombobox's DataSource (which is DataTable). 
But as soon as longer string is placed inside DataTable, strange problem accures. 
Try two things:
1.) Run the program. Click on the RadMultiColumnComboBox. Popup with RadGridView accures automatically. Now click on the LastName filter. Enter character 0. Filtering works for now.
2.) Now erase this character and enter another one - z. There is no last name that contains letter z, true... but that should not crach the application. The application crashes. Why? If you shorten the first name in the first row and run the application again, this doesn't happen.

Below there is a Form1.vb with all the code needed. In designer I only have one RadMulticolumnComboBox1 control, placed on Form1.

Imports Telerik.WinControls.UI
Imports Telerik.WinControls.Data
 
Public Class Form1
    Private shouldNotCancelPopup = True
 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim dt As New DataTable
        dt.Columns.Add("FirstName")
        dt.Columns.Add("LastName")
        dt.Rows.Add("Selectt one", "")
        dt.Rows.Add("Very very loooong looong first name", "Last Name 0") 'This one is the troublemaker. I do not know why.
 
        dt.Rows.Add("Short first name 1", "Last Name 1")
        dt.Rows.Add("Short first name 2", "Last Name 2")
 
        Me.RadMultiColumnComboBox1.DataSource = dt
        Me.RadMultiColumnComboBox1.EditorControl.Rows(0).IsPinned = True
        Me.RadMultiColumnComboBox1.DisplayMember = "FirstName"
        Me.RadMultiColumnComboBox1.ValueMember = "LastName"
        setChangeableVisibilityStyle(RadMultiColumnComboBox1)
        enableEditorControlFiltering(Me.RadMultiColumnComboBox1)
        linkComboBoxFilterWithHisEditorControlFilter(RadMultiColumnComboBox1)
    End Sub
 
    Public Sub enableEditorControlFiltering(ByRef cb As RadMultiColumnComboBox)
        cb.EditorControl.ShowRowHeaderColumn = False
        cb.EditorControl.EnableFiltering = True
        cb.EditorControl.ShowFilteringRow = True
        AddHandler cb.EditorControl.MouseLeave, AddressOf cb_EditorControl_MouseLeave
        AddHandler cb.DropDownClosing, AddressOf cb_DropDownClosing
        AddHandler cb.EditorControl.CellClick, AddressOf cb_GridWithoutCheckBoxes_CellClick
    End Sub
 
    Private Sub cb_DropDownClosing(ByVal sender As System.Object, ByVal args As Telerik.WinControls.UI.RadPopupClosingEventArgs)
        If shouldNotCancelPopup Then
            args.Cancel = True       
        End If
    End Sub
 
    Private Sub cb_EditorControl_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles cb_EditorControl_MouseLeave.MouseLeave
        shouldNotCancelPopup = False
    End Sub
 
    Private Sub cb_GridWithoutCheckBoxes_CellClick(ByVal sender As Object, ByVal e As Telerik.WinControls.UI.GridViewCellEventArgs)
        Try
            If e.RowIndex >= 0 Then            'If valid row
                shouldNotCancelPopup = False
            Else
                shouldNotCancelPopup = True
            End If
        Catch ex As Exception
        End Try
    End Sub
 
    Public Sub setChangeableVisibilityStyle(ByRef cb As RadMultiColumnComboBox)
        cb.EditorControl.BestFitColumns()
        cb.MultiColumnComboBoxElement.AutoSizeDropDownToBestFit = True
    End Sub
 
    Public Sub linkComboBoxFilterWithHisEditorControlFilter(ByVal cb As RadMultiColumnComboBox)
        cb.AutoFilter = True
        Dim filter As New FilterDescriptor()
        filter.PropertyName = cb.DisplayMember
        filter.Operator = FilterOperator.Contains
        cb.EditorControl.MasterTemplate.FilterDescriptors.Add(filter)
    End Sub
End Class

George
Telerik team
 answered on 25 Oct 2013
1 answer
147 views
Hello all,

link manager dialog displays with radtoolbar reappear above modal overlay when user clicks all properties button on insert link dialog
need to prevent users click any editor tools.
navigated code but I could not find any triggers that.
I am just assuming CSS issues.

Thank you
Kate
Telerik team
 answered on 25 Oct 2013
1 answer
162 views
Hi Telerik Team,

I have a problem with multi-column gridview printing. When I try to print a big radgridview e.g 100 rows and 50 columns everything is OK in vertical state because when is no space for rows on one page the rest is printing on another one. The problem is when there is no space for columns, then there are not moved on another page but cutted. So then I have e.g. only 30 columns instead of 50. Is there any possibility to print all of them to obtained view of whole gridview or this function is not available? It would be great if for example first column of gridview which is common to rest would be visible on each page where columns, which can't fit to the first page, were moved.

Best regards
Krystian
Ivan Petrov
Telerik team
 answered on 24 Oct 2013
4 answers
511 views
I am trying to create a hierarchy grid where the child template columns line up with the parent template columns.

To achieve this I am setting the width of the first column based on the hierarchy level.  I've found that a drop in 19 pixels makes up for the expander on the left of the row.  The other columns I have set dynamically based upon their parent column widths so that users can resize the grid and the columns will still fill the space.

The issue I am having is on initial load of the grid the columns get jumbled up.  However, after a user expands or collapses one of the columns everything lines up and works.  (See attached image).

Is there another way to achieve this that ensures that the child column are always lined up with the parent column widths?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.UI;
 
namespace HierarchyGridExample
{
    public partial class Form1 : Form
    {
        List<MyObject> GridData = new List<MyObject>();
        int count = 1;
 
        public Form1()
        {
            InitializeComponent();
 
            grid.CellValueChanged += grid_CellValueChanged;
            grid.ColumnWidthChanged += grid_ColumnWidthChanged;
            grid.ChildViewExpanding += grid_ChildViewExpanding;
            grid.MultiSelect = true;
            grid.SelectionMode = GridViewSelectionMode.FullRowSelect;
 
            GridViewTemplate level2 = new GridViewTemplate(), level3 = new GridViewTemplate();
            CreateTemplate(grid.MasterTemplate);
            CreateTemplate(level2);
            CreateTemplate(level3);
 
            level2.ShowColumnHeaders = false;
            level3.ShowColumnHeaders = false;
 
            grid.MasterTemplate.Templates.Add(level2);
            level2.Templates.Add(level3);
             
            GridViewRelation rel1 = new GridViewRelation(grid.MasterTemplate, level2);
            rel1.ChildColumnNames.Add("Children");
            grid.Relations.Add(rel1);
 
            GridViewRelation rel2 = new GridViewRelation(level2, level3);
            rel2.ChildColumnNames.Add("Children");
            grid.Relations.Add(rel2);
 
            /*CreateTemplate(grid.MasterTemplate);
 
            GridViewTemplate template = new GridViewTemplate();
            CreateTemplate(template);
            grid.MasterTemplate.Templates.Add(template);
            template.ShowFilteringRow = false;
 
            // Setup child relation
            GridViewRelation relation = new GridViewRelation(grid.MasterTemplate, template);
            relation.RelationName = "Children";
            relation.ChildColumnNames.Add("TopChildren");
            grid.Relations.Add(relation);
 
            CreateChildTemplate(template, 0);*/
 
            LoadData(true);
            grid.MasterTemplate.ExpandAll();
        }
 
        #region Editing
 
        void grid_CellValueChanged(object sender, GridViewCellEventArgs e)
        {
            if (e.Column.Name == "Enabled")
            {
                (e.Row.DataBoundItem as MyObject).Enabled = (bool)e.Value;
            }
        }
 
        #endregion Editing
 
        #region Formatting
 
        private void grid_CellFormatting(object sender, CellFormattingEventArgs e)
        {
            if (e.Column.Name == "HLevel")
            {
                e.CellElement.Text = e.Row.HierarchyLevel.ToString();
            }
            if (e.Column.Name == "Name")
            {
                /*e.CellElement.TextImageRelation = TextImageRelation.ImageBeforeText;
                e.CellElement.TextAlignment = ContentAlignment.MiddleLeft;
                e.CellElement.ImageAlignment = ContentAlignment.MiddleLeft;
                e.CellElement.Image = Properties.Resources.Radio;*/
                if (e.Row.HierarchyLevel == 0 && e.Column.Width != 150)
                {
                    e.Column.Width = 150;
                    e.Column.MaxWidth = 150;
                    e.Column.MinWidth = 150;
                }
                else if (e.Column.Width != 131 && e.Row.HierarchyLevel > 0)
                {
                    e.Column.Width = 131;
                    e.Column.MaxWidth = 131;
                    e.Column.MinWidth = 131;
                }
            }
            else
            {
                e.CellElement.Image = null;
            }
        }
 
        private void grid_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
        {
            if (e.ColumnIndex > 0)
            {
                int masterWidth = grid.MasterTemplate.Columns[e.ColumnIndex].Width;
                int child1Width = grid.MasterTemplate.Templates[0].Columns[e.ColumnIndex].Width;
                int child2Width = grid.MasterTemplate.Templates[0].Templates[0].Columns[e.ColumnIndex].Width;
                if (masterWidth != child1Width)
                {
                    grid.MasterTemplate.Templates[0].Columns[e.ColumnIndex].Width = masterWidth;
                    //grid.MasterTemplate.Templates[0].Refresh();
                }
                if (masterWidth != child2Width)
                {
                    grid.MasterTemplate.Templates[0].Templates[0].Columns[e.ColumnIndex].Width = masterWidth;
                    //grid.MasterTemplate.Templates[0].Templates[0].Refresh();
                }
            }
        }
 
        #endregion Formatting
 
        #region Expand
 
        private void grid_ChildViewExpanding(object sender, ChildViewExpandingEventArgs e)
        {
            if (!e.IsExpanded && e.ParentRow.ChildRows.Any())
            {
                List<GridViewTemplate> temps = new List<GridViewTemplate>();
                if (grid.MasterTemplate.Templates.Any())
                {
                    temps.Add(grid.MasterTemplate.Templates[0]);
                    if (grid.MasterTemplate.Templates[0].Templates.Any())
                    {
                        temps.Add(grid.MasterTemplate.Templates[0].Templates[0]);
                    }
                }
                for (int x = 1; x < grid.MasterTemplate.Columns.Count; x++)
                {
                    temps.ForEach(c => c.Columns[x].Width = grid.MasterTemplate.Columns[x].Width);
                }
            }
        }
 
        private void RestoreExpanded(GridViewRowInfo g, HashSet<object> expanded)
        {
            using (grid.DeferRefresh())
            {
                if (g == null)
                {
                    foreach (var item in this.grid.Rows)
                    {
                        if (expanded.Contains(item.DataBoundItem))
                        {
                            item.IsExpanded = true;
                        }
                        foreach (var child in item.ChildRows)
                        {
                            RestoreExpanded(child, expanded);
                        }
                    }
                }
                else
                {
                    if (expanded.Contains(g.DataBoundItem))
                    {
                        g.IsExpanded = true;
                    }
                    foreach (var child in g.ChildRows)
                    {
                        RestoreExpanded(child, expanded);
                    }
                }
            }
        }
 
        private void SaveExpanded(GridViewRowInfo g, HashSet<object> items)
        {
            if (g == null)
            {
                foreach (var item in this.grid.Rows)
                {
                    if (item.IsExpanded)
                    {
                        items.Add(item.DataBoundItem);
                    }
                    foreach (var child in item.ChildRows)
                    {
                        SaveExpanded(child, items);
                    }
                }
            }
            else
            {
                if (g.IsExpanded)
                {
                    items.Add(g.DataBoundItem);
                }
                foreach (var child in g.ChildRows)
                {
                    SaveExpanded(child, items);
                }
            }
        }
 
        #endregion Expand
 
        #region Data
 
        private void LoadData(bool createTestData = false)
        {
            using (grid.DeferRefresh())
            {
                HashSet<object> expanded = new HashSet<object>();
                SaveExpanded(null, expanded);
 
                grid.DataSource = null;
                if (createTestData)
                {
                    GridData = new List<MyObject>();
                    MyObject m1 = new MyObject("Test " + count);
                    count++;
                    LoadChild(m1, 3);
                    GridData.Add(m1);
                    MyObject m2 = new MyObject("Test " + count);
                    count++;
                    LoadChild(m2, 3);
                    GridData.Add(m2);
                    MyObject m3 = new MyObject("Test " + count);
                    count++;
                    LoadChild(m3, 3);
                    GridData.Add(m3);
                }
                grid.DataSource = GridData;
                 
                RestoreExpanded(null, expanded);
            }
        }
 
        private void LoadChild(MyObject parent, int number, int level = 0)
        {
            level++;
            for (int i = 0; i < number; i++)
            {
                MyObject m2 = new MyObject("Test " + count, count % 2 == 0);
                count++;
                parent.Children.Add(m2);
                m2.Parent = parent;
                if (level < 2)
                {
                    LoadChild(m2, number, level);
                }
            }
        }
 
        private void CreateChild(MyObject parent = null)
        {
            if (parent != null)
            {
                MyObject m2 = new MyObject("Test " + count, count % 2 == 0);
                count++;
                parent.Children.Add(m2);
                m2.Parent = parent;
                //parent.Children.ResetBindings();
            }
            else
            {
                MyObject m2 = new MyObject("Test " + count, count % 2 == 0);
                count++;
                GridData.Add(m2);
            }
            LoadData();
        }
 
        #endregion Data
 
        #region Template
 
        private void CreateTemplate(GridViewTemplate t, bool isMaster = false)
        {
            t.Columns.Clear();
            t.AutoGenerateColumns = false;
            t.ShowFilteringRow = false;
            t.EnableGrouping = false;
            t.AllowAddNewRow = false;
            t.EnableFiltering = true;
            t.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
 
            GridViewTextBoxColumn colName = new GridViewTextBoxColumn("Name");
            colName.HeaderText = "Name";
            colName.Name = "Name";
            t.Columns.Add(colName);
 
            GridViewTextBoxColumn colH = new GridViewTextBoxColumn();
            colH.HeaderText = "H Level";
            colH.Name = "HLevel";
            colH.ReadOnly = true;
            t.Columns.Add(colH);
 
            GridViewCheckBoxColumn colEnabled = new GridViewCheckBoxColumn("Enabled");
            colEnabled.HeaderText = "Enabled";
            colEnabled.Name = "Enabled";
            t.Columns.Add(colEnabled);
 
            GridViewTextBoxColumn col4 = new GridViewTextBoxColumn();
            col4.HeaderText = "Col 4";
            col4.Name = "Col4";
            col4.ReadOnly = true;
            t.Columns.Add(col4);
        }
 
        private void CreateChildTemplate(GridViewTemplate parent, int x)
        {
            GridViewTemplate template = new GridViewTemplate();
            CreateTemplate(template);
            template.ShowChildViewCaptions = false;
            template.ShowColumnHeaders = false;
            template.ShowFilteringRow = false;
 
            parent.Templates.Add(template);
            GridViewRelation r = new GridViewRelation(parent, template);
            r.ChildColumnNames.Add("Children");
            grid.Relations.Add(r);
 
            if (x < 10)
            {
                x++;
                CreateChildTemplate(template, x);
            }
        }
 
        private void UpdateTemplates(GridViewTemplate t)
        {
            t.Refresh();
            foreach (GridViewTemplate g in t.Templates)
            {
                UpdateTemplates(g);
            }
        }
 
        #endregion Template
 
        #region Buttons
 
        private void buttonReload_Click(object sender, EventArgs e)
        {
            LoadData();
        }
 
        private void buttonAddPeer_Click(object sender, EventArgs e)
        {
            if (grid.SelectedRows.Count == 1 && grid.SelectedRows[0].DataBoundItem != null && grid.SelectedRows[0].DataBoundItem is MyObject)
            {
                CreateChild((grid.SelectedRows[0].DataBoundItem as MyObject).Parent);
            }
            else
            {
                CreateChild();
            }
        }
 
        private void buttonAddChild_Click(object sender, EventArgs e)
        {
            if (grid.SelectedRows.Count == 1 && grid.SelectedRows[0].DataBoundItem != null)
            {
                CreateChild(grid.SelectedRows[0].DataBoundItem as MyObject);
            }
            else
            {
                CreateChild();
            }
        }
 
        private void buttonCollapse_Click(object sender, EventArgs e)
        {
            grid.MasterTemplate.CollapseAll();
        }
 
        private void buttonExpand_Click(object sender, EventArgs e)
        {
            grid.MasterTemplate.ExpandAll();
        }
 
        #endregion Buttons
    }
 
    public class MyObject
    {
        public MyObject Parent { get; set; }
 
        public string Name { get; set; }
 
        public bool Enabled { get; set; }
 
        public BindingList<MyObject> Children { get; set; }
 
        public MyObject(string name)
        {
            this.Enabled = true;
            this.Name = name;
            Children = new BindingList<MyObject>();
        }
        public MyObject(string name, bool enabled)
        {
            this.Enabled = enabled;
            this.Name = name;
            Children = new BindingList<MyObject>();
        }
    }
}
Dess | Tech Support Engineer, Principal
Telerik team
 answered on 24 Oct 2013
1 answer
122 views
Hello,

is there a opportunity to exclude the Suggests from the SelectedIndexChange?

I want to create a function, which reacts only, when the user really chooses an item by clicking or pressing the enter key. In the moment my function fires every time, when the user goes with the keyboard arrows through the suggested items.

Maybe theres another way then to react to the SelectedIndexChange?

Thanks for advices!

Greets
Dimitar
Telerik team
 answered on 24 Oct 2013
1 answer
188 views
I'm sure I might be going about this the wrong way, but here is what I'm trying to accomplish.

My UI has two sides, on the left a user entry form, and on the right a RTB that is formatted to look like a report might.  On load, I define bookmarks to note the start and end of areas.  These start and end bookmarks are to help me identify where to place any updates I'll need to do through code.

When the user types in a value or performs an action on the user entry form, some corresponding changes will need to happen within the RTB document.  I'll need to find the location within the document and perform the update.

Ideally, I can simply identify where I need to select text within the document, delete it, and replace it with whatever.  Also worth noting is that most updates will occur within a Textbox TextChanged event, so speed is a factor as well.

Am I approaching this the right way?  This is my first go with the RTB, and I want to make sure I'm doing things somewhat correct.  lol

Sample range identification:

this.txtCareplanPreview.InsertLineBreak();
this.txtCareplanPreview.InsertBookmark("InterventionNotes" + intItem.CCGInterventionId.ToString());
this.txtCareplanPreview.Insert("Notes: " + intItem.Description);
this.txtCareplanPreview.InsertBookmark("InterventionNotesEnd" + intItem.CCGInterventionId.ToString());
this.txtCareplanPreview.InsertLineBreak();

Update 10/21/2013: I'm attempting to dig into annotations now, but I'm unable to find any good information regarding their usage, either in the documentation or here in the forum.  I believe as this point, annotations are what I'm looking for.  I'd still like some input on how I can best accomplish my goals.
Thanks!

Wayne
Ivan Petrov
Telerik team
 answered on 23 Oct 2013
1 answer
149 views
Is there a way to get the ListDataItem object that the mouse is hovering over in a RadListControl?
I've been trying several approach's but been drawing a blank.  I'm thinking the item should already be available somehow since its being highlighted/formatted by the ListControl already...
Thx
Stefan
Telerik team
 answered on 23 Oct 2013
Narrow your results
Selected tags
Tags
GridView
General Discussions
Scheduler and Reminder
Treeview
Dock
RibbonBar
Themes and Visual Style Builder
ChartView
Calendar, DateTimePicker, TimePicker and Clock
DropDownList
Buttons, RadioButton, CheckBox, etc
ListView
ComboBox and ListBox (obsolete as of Q2 2010)
Form
Chart (obsolete as of Q1 2013)
PageView
MultiColumn ComboBox
TextBox
RichTextEditor
PropertyGrid
Menu
RichTextBox (obsolete as of Q3 2014 SP1)
Panelbar (obsolete as of Q2 2010)
PivotGrid and PivotFieldList
Tabstrip (obsolete as of Q2 2010)
MaskedEditBox
CommandBar
PdfViewer and PdfViewerNavigator
ListControl
Carousel
GanttView
Diagram, DiagramRibbonBar, DiagramToolBox
Panorama
New Product Suggestions
VirtualGrid
Toolstrip (obsolete as of Q3 2010)
AutoCompleteBox
Label
Spreadsheet
ContextMenu
Panel
Visual Studio Extensions
TitleBar
SplitContainer
Documentation
Map
DesktopAlert
CheckedDropDownList
ProgressBar
MessageBox
TrackBar
Rotator
SpinEditor
CheckedListBox
StatusStrip
CollapsiblePanel
LayoutControl
ShapedForm
SyntaxEditor
Wizard
TextBoxControl
Conversational UI, Chat
DateTimePicker
TabbedForm
CAB Enabling Kit
WaitingBar
GroupBox
DataEntry
ScrollablePanel
ScrollBar
ImageEditor
Tools - VSB, Control Spy, Shape Editor
BrowseEditor
DataFilter
FileDialogs
ColorDialog
Gauges (RadialGauge, LinearGauge, BulletGraph)
ApplicationMenu
RangeSelector
CardView
WebCam
NavigationView
BindingNavigator
RibbonForm
Styling
Barcode
PopupEditor
TaskBoard
Callout
ColorBox
PictureBox
FilterView
Accessibility
VirtualKeyboard
DataLayout
Licensing
ToastNotificationManager
ValidationProvider
CalculatorDropDown
Localization
TimePicker
BreadCrumb
ButtonTextBox
FontDropDownList
BarcodeView
Overlay
Security
LocalizationProvider
Dictionary
TreeMap
StepProgressBar
SplashScreen
Flyout
Separator
SparkLine
ToolbarForm
NotifyIcon
DateOnlyPicker
AI Coding Assistant
Rating
TimeSpanPicker
Calculator
OfficeNavigationBar
TaskbarButton
HeatMap
SlideView
PipsPager
AIPrompt
TaskDialog
TimeOnlyPicker
SpeechToTextButton
+? more
Top users last month
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Hiba
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Max
Top achievements
Rank 1
Veteran
Iron
Alina
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Top users last month
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Hiba
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Max
Top achievements
Rank 1
Veteran
Iron
Alina
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?