This is a migrated thread and some comments may be shown as answers.

Color picker in a Ribbon group

12 Answers 253 Views
RibbonBar
This is a migrated thread and some comments may be shown as answers.
Jack
Top achievements
Rank 1
Jack asked on 29 Mar 2011, 10:23 PM
Hi,

I am trying to find a way to add a color picker to a ribbon group. I couldn't find the color picker control as such.
Could someone help me in this regard?

I am using RadControls for WinForms Q3 2010.


12 Answers, 1 is accepted

Sort by
0
Richard Slade
Top achievements
Rank 2
answered on 31 Mar 2011, 10:50 AM
Hello Jack,

As far as I'm aware, there is no colour picker as per the one in your screenshot. However, if you go to the demos n your PC and look at the RibbonBar >> First Look one, then there is an exmaple of showing a colour pallette with an Edit Colours section that launches the RadColorDialog. This RadColorDialog can also be seen in full in the demos under Forms & Dialogs >> Color Dialog

Hope that helps
Richard
0
Jack
Top achievements
Rank 1
answered on 31 Mar 2011, 04:07 PM
Hi Richard,

Thanks for the reply but I was looking for something similar to the one in MS word. I did look at the color dialog in the examples but will use it in the worst case scenario.
0
Richard Slade
Top achievements
Rank 2
answered on 31 Mar 2011, 04:49 PM
Hi Jack,

There is one that someone has created here but this is not supported in any way by Telerik.
Hope that helps
Richard
0
Richard Slade
Top achievements
Rank 2
answered on 31 Mar 2011, 05:25 PM
Hi,

I've got a couple of ideas, but not sure if it will work. I'll let you know if I can get something working for you.
Richard
0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 31 Mar 2011, 08:29 PM
Hi again Jack,

Ok, I've managed to put something together for you. It's not exactly like the Microsoft one, but it seems to do the job pretty well.
The concept is based on an inherited RadSplitButton, and then adding in a Menu Item that contains a panel. In the panel I have added the standard RadColorDialogForm and then resized everything to make it look a little neater.

The new RadDropDownColorPicker looks like a standard RadSplitButton and you can add an image of course to the button to make it look more like you need to. I have made a small video of the functionality which you can find here

The code probably needs a bit of a tidy up, but it's all here

RadDropDownColorPicker.vb
Imports Telerik.WinControls.UI
Imports Telerik.WinControls
  
Public Class RadDropDownColorPicker
    Inherits RadSplitButton
  
    Private m_CurrentColor As System.Drawing.Color = Color.Black
    Private m_Form As RadColorDialogForm
    Private m_Panel As RadPanel
  
    Public Event ColorChanged As EventHandler(Of ColorChangedEventArgs)
  
  
    Public Sub New()
        MyBase.New()
  
        Me.DropDownButtonElement.ArrowButton.Fill.BackColor = m_CurrentColor
        Me.DropDownButtonElement.ArrowButton.Fill.NumberOfColors = 1
  
        m_Panel = New RadPanel()
  
        Dim item As New RadMenuItem()
        item.MaxSize = New Size(508, 395)
        Me.Items.Add(item)
  
        AddHandler Me.DropDownButtonElement.DropDownMenu.PopupOpened, AddressOf DropDown_PopUpOpened
    End Sub
  
    Public Property CurrentColor As System.Drawing.Color
        Get
            Return m_CurrentColor
        End Get
        Set(value As System.Drawing.Color)
            m_CurrentColor = value
            Me.DropDownButtonElement.ArrowButton.Fill.BackColor = m_CurrentColor
            RaiseEvent ColorChanged(Me, New ColorChangedEventArgs(m_CurrentColor))
        End Set
    End Property
  
  
    Private Sub DropDown_PopUpOpened(sender As Object, args As EventArgs)
        Me.DropDownButtonElement.DropDownMenu.PopupElement.MaxSize = New Size(508, 395)
  
        Me.Items.Clear()
        m_Panel.Size = New Size(508, 395)
        m_Form = New RadColorDialogForm()
        m_Form.SelectedColor = m_CurrentColor
        m_Form.OldColor = m_CurrentColor
        m_Form.ShowBasicColors = False
        m_Form.ShowSystemColors = False
        m_Form.ShowWebColors = False
        m_Form.TopLevel = False
  
        AddHandler m_Form.FormClosing, AddressOf ColorForm_Closing
  
        m_Form.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        m_Panel.Controls.Add(m_Form)
        m_Form.Show()
  
        Dim item As New RadMenuItem()
        item.AutoSize = False
        item.BackColor = Color.Transparent
        item.Size = m_Panel.Size
        item.Alignment = ContentAlignment.MiddleCenter
        item.Children.Add(New RadHostItem(m_Panel))
        Me.Items.Add(item)
  
    End Sub
  
    Private Sub ColorForm_Closing(sender As Object, e As FormClosingEventArgs)
        CurrentColor = CType(sender, RadColorDialogForm).SelectedColor
        Me.DropDownButtonElement.DropDownMenu.ClosePopup(RadPopupCloseReason.ParentClosed)
        Me.DropDownButtonElement.ArrowButton.Fill.BackColor = m_CurrentColor
        RemoveHandler m_Form.FormClosing, AddressOf ColorForm_Closing
    End Sub
  
    Public Overrides Property ThemeClassName As String
        Get
            Return GetType(RadSplitButton).FullName
        End Get
        Set(value As String)
        End Set
    End Property
  
  
  
End Class

Example Usage (Form1.vb)
Imports Telerik.WinControls
Imports Telerik.WinControls.UI
  
Public Class Form1
  
    Private Sub RadDropDownColorPicker1_ColorChanged(sender As System.Object, e As Telerik.WinControls.ColorChangedEventArgs) Handles RadDropDownColorPicker1.ColorChanged
        Me.RadLabel1.ForeColor = e.SelectedColor
    End Sub
  
End Class

I hope this helps. If you find it good enough, then I might submit it as a Code Library project in both VB and C#.
Regards,
Richard

0
Jack
Top achievements
Rank 1
answered on 31 Mar 2011, 10:36 PM
Hi Richard,

Sorry for the delayed response. I am in the process of testing it out. Will update you asap.

Thanks a lot for your help.
0
Richard Slade
Top achievements
Rank 2
answered on 31 Mar 2011, 10:50 PM
You're welcome Jack. Look forward to hearing back from you
Richard
0
Jack
Top achievements
Rank 1
answered on 31 Mar 2011, 10:52 PM
Hi Richard,

Thank you. It worked like a charm. I added the control to a form and was able to use it but looks like a ribbon group can allow only buttonelements and not buttons as such. So, I was not able to add this control to the ribbongroup which is where I actually want to add.

I tried to make some changes to your code by inheriting from the RadSplitButtonElement but was not successful in handling the DropDownButtonElement property. I couldn't find this property in the RadSplitButtonElement class.

Please advise me in this regard.
0
Jack
Top achievements
Rank 1
answered on 31 Mar 2011, 11:23 PM
Hi Richard,

Just read about the button element which I think I should have done much earlier. But anyways, as I understand the RadSplitButtonElement is itself the DropDownButtonElement and I can access the ArrowButton, DropDownMenu etc properties in it.
Was not able to access these properties earlier for some reason, so was a bit confused.

Everything just works perfectly as I was able to add the RadDropDownColorPicker to the ribbon group.

Thanks again.

0
Richard Slade
Top achievements
Rank 2
answered on 31 Mar 2011, 11:30 PM
You're welcome Jack. I'm glad that this helped you out.
All the best
Richard
0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 04 Apr 2011, 11:06 AM
Hello Jack,

Just to let you know there is a slightly improved version in both C# and VB now available in this code library article
All the best
Richard
0
Jack
Top achievements
Rank 1
answered on 04 Apr 2011, 03:39 PM
Thanks Richard.
Tags
RibbonBar
Asked by
Jack
Top achievements
Rank 1
Answers by
Richard Slade
Top achievements
Rank 2
Jack
Top achievements
Rank 1
Share this question
or