priyamtheone's Profile User Rating: -----

Reputation: 2 Apprentice
Group:
Active Members
Active Posts:
75 (0.04 per day)
Joined:
02-September 08
Profile Views:
6,960
Last Active:
User is offline Mar 30 2014 08:56 AM
Currently:
Offline

Previous Fields

Dream Kudos:
0

Latest Visitors

Icon   priyamtheone has not set their status

Posts I've Made

  1. In Topic: Detecting mouse button down & up events on the system menu of form

    Posted 30 Mar 2014

    Here’s what I found. Though it’s not exactly what I originally posted for but at least it narrows down to my requirement.

    Instead of identifying separately if the user clicked the Close button at the top right corner of the title bar of the form or the ‘Close’ option in the system menu, or he/she pressed the Alt+F4 keys, we can combine these factors together to check if the user is consuming the system command (i.e. any of the above three techniques) to close the form or is doing so programmatically. If the system command is used, action is taken accordingly; else we ignore.

    A button is used to close down the form programmatically without any interruption.

    public partial class Form1 : Form
        {
            private const int WM_SYSCOMMAND = 0x0112;
            private const int SC_CLOSE = 0xF060;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            protected override void WndProc(ref Message m)
            {
                // Check if the user is consuming the system command to close the form.
                if ((m.Msg == WM_SYSCOMMAND) && ((int)m.WParam == SC_CLOSE))
                {
                    MessageBox.Show("Form closing by system command. Take necessary actions here...");
                }
    
                base.WndProc(ref m);
            }
    
            private void btnClose_Click(object sender, EventArgs e)
            {
                Close();
            }
        }
    
  2. In Topic: How to use an Items Collection Editor on a custom UserControl?

    Posted 15 Sep 2012

    Hi there!
    I have been working on the issue for a while, and the two most widely held ideas I got are:
    1) Exposing the ToolStrip as a property.
    2) Use a ControlDesigner for the UserControl and set EnableDesignMode for the ToolStrip.

    But somehow none of them actually served my purpose, as exposing the ToolStrip would let the user have full control on it, which was not my objective. The second option would even put the user up with deleting the ToolStrip. Hence I had to figure out a different approach. That's when I tripped upon the CollectionBase class.

    As it says, the CollectionBase class is the abstract base class for a strongly typed collection. So how about maintaining the ToolStrip item collection through it?
    I created an instance of the CollectionBase class and regulated the addition, modification, fetching and deletion of the ToolStrip items through it. Each item in the collection hails from a class that is inherited from the ToolStripButton class. In that way, individual item can be handled as any standard ToolStripButton and you can hide or show the properties to the user accordingly. Lastly, the ToolStrip in question is set as the parent of the CollectionBase which eventually becomes the parent of each ToolStripItem too. Here's the concept:

    Imports System.ComponentModel
    Imports System.Windows.Forms
    Imports Office2003
    Imports System.Drawing
    Imports System.Windows.Forms.Design
    
    Public Class MyUserControl
        Private _Buttons As MyUserControlButtons
        Public Event MyUserControlButtonclicked(ByVal Sender As MyUserControlButton)
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Component Designer.
            InitializeComponent()
    
            _Buttons = New MyUserControlButtons(MyToolStrip)
        End Sub
    
        <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
        Public ReadOnly Property Buttons As MyUserControlButtons
            Get
                Return _Buttons
            End Get
        End Property
    
        Private Sub MyToolStrip_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles MyToolStrip.ItemClicked
    	 'Check if the ToolStrip item clicked is a ToolStripButton...
            If TypeOf e.ClickedItem Is ToolStripButton Then
                'Insert your code here...
    
    	     'Raise the custom event.
                RaiseEvent MyUserControlButtonclicked(Item)
            End If
        End Sub
    End Class
    
    #Region "Manager classes for MyUserControl buttons."
    
    Public Class MyUserControlButtons
        Inherits CollectionBase
        Private _Parent As ToolStrip
    
        ''' <summary>
        ''' Initializes a new instance of the MyUserControlButtons class.
        ''' </summary>
        ''' <param name="Holder">The ToolStrip that contains the items of the MyUserControlButtons class.</param>
        Public Sub New(ByVal Holder As ToolStrip)
            MyBase.New()
            _Parent = Holder
        End Sub
    
        ''' <summary>
        ''' The ToolStrip that contains this item.
        ''' </summary>
        Public ReadOnly Property Parent() As ToolStrip
            Get
                Return _Parent
            End Get
        End Property
    
        ''' <summary>
        ''' Gets the element at the specified index.
        ''' </summary>
        ''' <param name="Index">The zero-based index of the element to get.</param>
        Default Public ReadOnly Property Item(ByVal Index As Integer) As MyUserControlButton
            Get
                Return CType(List(Index), MyUserControlButton)
            End Get
        End Property
    
        ''' <summary>
        ''' Adds an item to the collection.
        ''' </summary>
        Public Function Add() As MyUserControlButton
            Return Me.Add
        End Function
    
        ''' <summary>
        ''' Adds an item to the collection.
        ''' </summary>
        ''' <param name="Value">The object to add to the collection.</param>
        Public Sub Add(ByVal Value As MyUserControlButton)
            List.Add(Value)
            Value.Parent = Me.Parent
        End Sub
    
        ''' <summary>
        ''' Adds an item to the collection.
        ''' </summary>
        ''' <param name="Name">The name of the object to add to the collection.</param>
        ''' <param name="Image">The image of the object to add to the collection.</param>
        Public Function Add(ByVal Name As String, ByVal Image As Image) As MyUserControlButton
            Dim b As MyUserControlButton = New MyUserControlButton(Me.Parent)
            b.Name = Name
            b.Text = Name
            b.Image = Image
            Me.Add(B)/>
            Return b
        End Function
    
        ''' <summary>
        ''' Adds an item to the collection.
        ''' </summary>
        ''' <param name="Name">The name of the object to add to the collection.</param>
        ''' <param name="Text">The text of the object to add to the collection.</param>
        ''' <param name="Image">The image of the object to add to the collection.</param>
        Public Function Add(ByVal Name As String, ByVal Text As String, ByVal Image As Image) As MyUserControlButton
            Dim b As MyUserControlButton = New MyUserControlButton(Me.Parent)
            b.Name = Name
            b.Text = Text
            b.Image = Image
            Me.Add(B)/>
            Return b
        End Function
    
        ''' <summary>
        ''' Removes the first occurence of a specific object from the collection.
        ''' </summary>
        ''' <param name="Value">The object to be removed.</param>
        Public Sub Remove(ByVal Value As MyUserControlButton)
            List.Remove(Value)
        End Sub
    
        ''' <summary>
        ''' Determines the index of a specific item in the collection.
        ''' </summary>
        ''' <param name="Value">The object to locate in the collection.</param>
        Public Function IndexOf(ByVal Value As Object) As Integer
            Return List.IndexOf(Value)
        End Function
    
        ''' <summary>
        ''' Determines whether the collection contains a specific value.
        ''' </summary>
        ''' <param name="Value">The object to locate in the collection.</param>
        Public Function Contains(ByVal Value As MyUserControlButton) As Boolean
            Return List.Contains(Value)
        End Function
    
        Protected Overrides Sub OnInsertComplete(ByVal index As Integer, ByVal value As Object)
            Dim b As MyUserControlButton = CType(value, MyUserControlButton)
            b.Parent = Me.Parent
            Me.Parent.Items.Insert(index, CType(value, ToolStripButton))
            MyBase.OnInsertComplete(index, value)
        End Sub
    
        Protected Overrides Sub OnSetComplete(ByVal index As Integer, ByVal oldValue As Object, ByVal newValue As Object)
            Dim b As MyUserControlButton = CType(newValue, MyUserControlButton)
            b.Parent = Me.Parent
            MyBase.OnSetComplete(index, oldValue, newValue)
        End Sub
    
        Protected Overrides Sub OnClearComplete()
            MyBase.OnClearComplete()
        End Sub
    End Class
    
    Public Class MyUserControlButton
        Inherits ToolStripButton
    
        ''' <summary>
        ''' Initializes a new instance of the MyUserControlButton class.
        ''' </summary>
        Sub New()
            MyBase.New()
            Init()
        End Sub
    
        ''' <summary>
        ''' Initializes a new instance of the MyUserControlButton class.
        ''' </summary>
        ''' <param name="Holder">The ToolStrip that contains the StackView button.</param>
        Sub New(ByVal Holder As ToolStrip)
            MyBase.New()
            Init()
            Me.Parent = Holder
        End Sub
    
        Private Sub Init()
            Me.AutoToolTip = False
            Me.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText
            Me.ImageAlign = ContentAlignment.MiddleLeft
            Me.ImageIndex = -1
            Me.ImageKey = ""
            Me.ImageTransparentColor = Color.Magenta
            Me.TextAlign = ContentAlignment.MiddleLeft
            Me.TextDirection = ToolStripTextDirection.Horizontal
        End Sub
    
        ''' <remarks>
        ''' Hide this property from the user in both design and code editor.
        ''' </remarks>
        <Browsable(False),
        EditorBrowsable(False)> _
        Public Shadows Property AccessibleDefaultActionDescription As String
            Get
                Return MyBase.AccessibleDefaultActionDescription
            End Get
            Set(ByVal value As String)
                MyBase.AccessibleDefaultActionDescription = value
            End Set
        End Property
    
        ''' <remarks>
        ''' Hide this property from the user in both design and code editor.
        ''' </remarks>
        <Browsable(False),
        EditorBrowsable(False)> _
        Public Shadows Property AccessibleDescription As String
            Get
                Return MyBase.AccessibleDescription
            End Get
            Set(ByVal value As String)
                MyBase.AccessibleDescription = value
            End Set
        End Property
    
        ''' <remarks>
        ''' Hide this property from the user in both design and code editor.
        ''' </remarks>
        <Browsable(False),
        EditorBrowsable(False)> _
        Public Shadows Property AccessibleName As String
            Get
                Return MyBase.AccessibleName
            End Get
            Set(ByVal value As String)
                MyBase.AccessibleName = value
            End Set
        End Property
    
    
        ' Keep on hiding the irrelevant properties...
    
    
        ''' <summary>
        ''' Gets or sets a value indicating whether default or custom ToolTip text is displayed on the ToolStripButton.
        ''' </summary>
        <DefaultValue(False)> _
        Public Shadows Property AutoToolTip As Boolean
            Get
                Return MyBase.AutoToolTip
            End Get
            Set(ByVal value As Boolean)
                MyBase.AutoToolTip = value
            End Set
        End Property
    
        ''' <summary>
        ''' Specifies whether the image and text are rendered.
        ''' </summary>
        <DefaultValue(GetType(ToolStripItemDisplayStyle), "ImageAndText")> _
        Public Overrides Property DisplayStyle As System.Windows.Forms.ToolStripItemDisplayStyle
            Get
                Return MyBase.DisplayStyle
            End Get
            Set(ByVal value As System.Windows.Forms.ToolStripItemDisplayStyle)
                MyBase.DisplayStyle = value
            End Set
        End Property
    
        ''' <summary>
        ''' The image that will be displayed on the control.
        ''' </summary>
        Public Overrides Property Image() As Image
            Get
                Return MyBase.Image
            End Get
            Set(ByVal value As Image)
                MyBase.Image = value
            End Set
        End Property
    
        ''' <summary>
        ''' Gets or sets the alignment of the image on a ToolStripItem.
        ''' </summary>
        <DefaultValue(GetType(ContentAlignment), "MiddleLeft")> _
        Public Shadows Property ImageAlign As ContentAlignment
            Get
                Return MyBase.ImageAlign
            End Get
            Set(ByVal value As ContentAlignment)
                MyBase.ImageAlign = value
            End Set
        End Property
    
        <EditorBrowsable(False),
        DefaultValue(-1)> _
        Public Shadows Property ImageIndex As Integer
            Get
                Return MyBase.ImageIndex
            End Get
            Set(ByVal value As Integer)
                MyBase.ImageIndex = value
            End Set
        End Property
    
        <EditorBrowsable(False),
        DefaultValue("")> _
        Public Shadows Property ImageKey As String
            Get
                Return MyBase.ImageKey
            End Get
            Set(ByVal value As String)
                MyBase.ImageKey = value
            End Set
        End Property
    
        ''' <summary>
        ''' Gets or sets the color to treat as transparent in a ToolStripItem image.
        ''' </summary>
        Public Shadows Property ImageTransparentColor As Color
            Get
                Return MyBase.ImageTransparentColor
            End Get
            Set(ByVal value As Color)
                MyBase.ImageTransparentColor = value
            End Set
        End Property
    
        ''' <summary>
        ''' Specifies the name used to identify the object.
        ''' </summary>
        Public Shadows Property Name() As String
            Get
                Return MyBase.Name
            End Get
            Set(ByVal value As String)
                MyBase.Name = value
            End Set
        End Property
    
        ''' <summary>
        ''' The ToolStrip that contains this item.
        ''' </summary>
        <Browsable(False)> _
        Public Shadows Property Parent As ToolStrip
            Get
                Return MyBase.Parent
            End Get
            Set(ByVal value As ToolStrip)
                MyBase.Parent = value
            End Set
        End Property
    
        ''' <summary>
        ''' The text that will be displayed on the control.
        ''' </summary>
        Public Overrides Property Text() As String
            Get
                Return MyBase.Text
            End Get
            Set(ByVal value As String)
                MyBase.Text = value
            End Set
        End Property
    
        ''' <summary>
        ''' Gets or sets the alignment of the text on a ToolStripLabel.
        ''' </summary>
        <DefaultValue(GetType(ContentAlignment), "MiddleLeft")> _
        Public Overrides Property TextAlign As ContentAlignment
            Get
                Return MyBase.TextAlign
            End Get
            Set(ByVal value As ContentAlignment)
                MyBase.TextAlign = value
            End Set
        End Property
    
        <Browsable(False),
        EditorBrowsable(False),
        DefaultValue(GetType(ToolStripTextDirection), "Horizontal")> _
        Public Overrides Property TextDirection As ToolStripTextDirection
            Get
                Return MyBase.TextDirection
            End Get
            Set(ByVal value As ToolStripTextDirection)
                MyBase.TextDirection = value
            End Set
        End Property
    
    
        ' Define other properties accordingly...
    End Class
    
    #End Region
    


    MyUserControl is the custom user control containing the ToolStrip named MyToolStrip. MyUserControlButtons is the class that inherits from CollectionBase and each item of MyUserControlButtons is an object of MyUserControlButton class that inherits from ToolStripButton.

    In the constructor of MyUserControl, MyUserControlButtons is instantiated with MyToolStrip as its parent. Items are added to MyUserControlButtons by creating new objects from MyUserControlButton. Properties of the items to be hidden or shown are managed in MyUserControlButton.
    MyUserControl returns the list of the buttons through the read only property 'Buttons'. Note the DesignerSerializationVisibility attribute of the 'Buttons' property. It specifies the type of persistence to use when serializing a property on a component at design time. The 'Content' enumeration member tells the code generator to produce code for the contents of the object, rather than for the object itself.

    The drawback in this approach is that you cannot retain the items of the ToolStrip while performing copy-paste on the UserControl. It serializes the contents only when items are handled explicitly by the user but not during copy-paste. Any idea of how to deal with it is highly appreciated.

    Thanks to all posters. Though I applied my own concept, your ideas paved my way.
  3. In Topic: Problem in ToolStripComboBoxItem arrow paint (VS.Net 2010, WinForms).

    Posted 25 Aug 2012

    ToolStripComboBox is a regular combobox that is hosted in a ToolStripControlHost. ToolStripItem arrows is as mentioned the menu children indicators and is not related to that. You may be able to utilize the code to custom paint ComboBox here: Painting right arrow in ToolStripComboBox
  4. In Topic: Problem in ToolStripProgressBar painting (VS.Net 2010, WinForms).

    Posted 25 Aug 2012

    It seems to be a bug. One way to remedy it is to handle SystemEvents.UserPreferenceChanged for e.Category=VisualStyle and change the Progressbar.Style to something and back again.
  5. In Topic: Problem in inherited form (VS.Net 2010, WinForms).

    Posted 25 Aug 2012

    The naming of forms is done by the design IDE. It is not part of the Form Class. The IDE sets the name of a form to its text by default when it is created from the 'Add New Item' dialog box. But it's not done in case of inherited forms. Seems I have to set a default text in MyForm's constructor.

My Information

Member Title:
D.I.C Head
Age:
Age Unknown
Birthday:
Birthday Unknown
Gender:

Contact Information

E-mail:
Click here to e-mail me

Friends

priyamtheone hasn't added any friends yet.

Comments

priyamtheone has no profile comments yet. Why not say hello?