This project is read-only.

implementing the toolbox is too hard

Sep 18, 2012 at 2:28 PM

So far it didnt work to make the toolbox a part of my own dotspatial tool.... i have had a professional programmer at my work look into it and somehow after a few hours it still faild... I DockManager and such are too hard to implement/to understand ....

The videos are sadly outdated....   any ideas whats wrong or what I am missing here....  I still in love with dotspatial tho.... :o)

Sep 19, 2012 at 12:12 AM

Anyone?  The toolbox is really wanted....

Sep 20, 2012 at 3:48 AM

It should only take 4-5 lines of code, and a few downloads.

1) https://mudnug.wordpress.com/2011/11/23/how-to-support-loading-extensions-in-dotspatial/

2) https://mudnug.wordpress.com/2012/04/20/how-to-add-support-for-loading-dotspatial-plugins-ribbon/

Then download our sample ribbon control and a sample dockmanager and ToolManager and Tools (you can search for them with the Extension manager).

Sep 21, 2012 at 12:45 AM
Edited Sep 21, 2012 at 2:03 AM

I did these steps......

1) I loaded the AppManager on my form and named it appManagerDMC and set the properties, the legend Legenda and the map myVenster

http://s9.postimage.org/3w923iyfj/appmanagerscreen.jpg

2) Then I added this in my form load.....

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        AppManagerDMC.LoadExtensions()

    End Sub

 

3) I didnt had to unblock the zip, the dlls seems ok and i putted 2 files in my programms Plug

4) I have already a project like the screenshot you see here

http://s8.postimage.org/f7wdzgw05/screen1.jpg

 It shows you buildings and points how represent buildings having to much noise from railwaytraffic on their walls.... this noise is -based on the height- converted to a number points and these points are projected onto the railway in a 127 degrees arc. The railway is splitted in parts of 10 metres and get filled by the points. The larger the bar the more points in it, the more change a noise barrier would be valid to place to limit the noise for the building.

5) I added the references and such already for the programm i already got it working showed above....

6) I set the target framework already for all configurations to .NET Framework 4

7) I added code below, to my main form.....  here i miss the thing what to do...

 

Dim Shell As ContainerControl
Shell = Me
appManagerDMC.LoadExtensions

 

8) And now i think I am at How to Load DotSpatial Extensions Into My Toolbar.

"We don’t want these developers to worry about checking first to see if a header control or progress bar is available, so we categorically require that the application developer implement IDockManager, IHeaderControl, and IStatusControl."

And here it starts to get confusing..... I think I have to make 3 classes.... I made :

1) IDockManager
2) IHeaderManager
3) IStatusControl 

And then I am lost :o( so any way you can help us.....?

 

I used ILSpy for the IDockmanager code to be copied from an other programm resulting in and it appears without errors....!!! :o)


 

 

Imports System
Imports System.ComponentModel.Composition
Imports DotSpatial.Controls.Docking

Namespace DotSpatial.Controls.Docking
    <InheritedExport()>
    Public Interface IDockManager
        Event ActivePanelChanged As EventHandler(Of DockablePanelEventArgs)

        Event PanelClosed As EventHandler(Of DockablePanelEventArgs)

        Event PanelAdded As EventHandler(Of DockablePanelEventArgs)

        Event PanelRemoved As EventHandler(Of DockablePanelEventArgs)

        Sub Add(ByVal panel As DockablePanel)

        Sub Remove(ByVal key As String)

        Sub ResetLayout()

        Sub SelectPanel(ByVal key As String)
    End Interface
End Namespace

And this code for IStatusControl with errors! :o(

 

 


Imports
DotSpatial.Data Imports System Imports System.ComponentModel.Composition Namespace DotSpatial.Controls.Header <InheritedExport()> Public Interface IStatusControl Implements IProgressHandler Sub Add(panel As StatusPanel) Sub Remove(panel As StatusPanel) End Interface End Namespace

 

 

 



 

with the code for IHeaderControl containing one error, see the purple part which says: 

class simpleheadercontrol must implement sub onimportsatisfied for interface......

 




Imports System.ComponentModel.Composition
Imports DotSpatial.Controls
Imports DotSpatial.Controls.Header <Export(GetType(IHeaderControl))> _ Public Class SimpleHeaderControl Inherits MenuBarHeaderControl Implements IPartImportsSatisfiedNotification Private toolStripContainer1 As ToolStripContainer <Import("Shell", GetType(ContainerControl))> _ Private Property Shell As ContainerControl Get End Get Set(ByVal value As ContainerControl) End Set End Property Public Sub OnImportsSatisfied() Me.toolStripContainer1 = New ToolStripContainer Me.toolStripContainer1.ContentPanel.SuspendLayout() Me.toolStripContainer1.SuspendLayout() Me.toolStripContainer1.Dock = DockStyle.Fill Me.toolStripContainer1.Name = "toolStripContainer1" ' place all of the controls that were on the form originally inside of our content panel. While (Shell.Controls.Count > 0) For Each control As Control In Shell.Controls Me.toolStripContainer1.ContentPanel.Controls.Add(control) Next End While Shell.Controls.Add(Me.toolStripContainer1) Me.toolStripContainer1.ContentPanel.ResumeLayout(False) Me.toolStripContainer1.ResumeLayout(False) Me.toolStripContainer1.PerformLayout() Initialize(toolStripContainer1) End Sub End Class

 

This one I found in the mapwindow.exe

 


Imports
System Namespace DotSpatial.Controls.Header Public Interface IHeaderControl Event RootItemSelected As EventHandler(Of RootItemEventArgs) Sub Add(item As HeaderItem) Sub Remove(key As String) Sub RemoveAll() Sub SelectRoot(key As String) End Interface End Namespace
Sep 21, 2012 at 10:52 AM

Hi Joska,

 

See below my three classes :

 

SimpleDocking.vb

Imports System.Collections.Generic
Imports System.Windows.Forms
Imports DotSpatial.Controls.Docking

Namespace GISProject
    ''' <summary>
    '''
    ''' </summary>
    Public Class SimpleDocking

        Implements IDockManager


        Private forms As New List(Of Form)()

#Region "IDockManager Members"

        ''' <summary>
        ''' Removes the specified panel.
        ''' </summary>
        ''' <param name="key">The key.</param>
        Public Sub Remove(ByVal key As String) Implements IDockManager.Remove
            For Each form As Form In forms
                If form.Name = key Then
                    form.Close()
                    forms.Remove(form)
                    Exit For
                End If
            Next
        End Sub

        ''' <summary>
        ''' Occurs when the active panel is changed.
        ''' </summary>
        Public Event ActivePanelChanged As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.ActivePanelChanged

        ''' <summary>
        ''' Selects the panel.
        ''' </summary>
        ''' <param name="key">The key.</param>
        Public Sub SelectPanel(ByVal key As String) Implements IDockManager.SelectPanel
        End Sub

        ''' <summary>
        ''' Adds the specified panel.
        ''' </summary>
        ''' <param name="panel"></param>
        Public Sub Add(ByVal panel As DockablePanel) Implements IDockManager.Add
            Add(panel.Key, panel.Caption, panel.InnerControl, panel.Dock)
        End Sub

        ''' <summary>
        ''' Resets the layout of the dock panels to a developer specified location.
        ''' </summary>
        Public Sub ResetLayout() Implements IDockManager.ResetLayout

        End Sub

        Public Sub HidePanel(ByVal Key As String) Implements IDockManager.HidePanel

        End Sub

        Public Event PanelClosed As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.PanelClosed

        Public Event PanelAdded As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.PanelAdded

        Public Event PanelRemoved As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.PanelRemoved

#End Region

#Region "OnPanelRemoved"

        ''' <summary>
        ''' Triggers the PanelRemoved event.
        ''' </summary>
        Public Overridable Sub OnPanelRemoved(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent PanelRemoved(Nothing, ea)
        End Sub

#End Region

#Region "OnPanelAdded"

        ''' <summary>
        ''' Triggers the PanelAdded event.
        ''' </summary>
        Public Overridable Sub OnPanelAdded(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent PanelAdded(Nothing, ea)
        End Sub

#End Region

#Region "OnPanelClosed"

        ''' <summary>
        ''' Triggers the PanelClosed event.
        ''' </summary>
        Public Overridable Sub OnPanelClosed(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent PanelClosed(Nothing, ea)
        End Sub

#End Region

#Region "OnActivePanelChanged"

        ''' <summary>
        ''' Triggers the ActivePanelChanged event.
        ''' </summary>
        Public Overridable Sub OnActivePanelChanged(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent ActivePanelChanged(Nothing, ea)
        End Sub

#End Region

        ''' <summary>
        ''' Adds the specified panel.
        ''' </summary>
        ''' <param name="key">The key.</param>
        ''' <param name="caption">The caption of the panel and any tab button.</param>
        ''' <param name="panel">The panel.</param>
        ''' <param name="dockStyle">The dock location.</param>
        ''' 
        Public Sub Add(ByVal key As String, ByVal caption As String, ByVal panel As Control, ByVal dockStyle__1 As DockStyle)
            panel.Dock = DockStyle.Fill

            Dim form = New Form()
            form.Controls.Add(panel)
            form.Name = key
            form.Width = panel.Width
            form.Height = panel.Height
            form.Show()
            AddHandler form.Activated, AddressOf form_Activated
            forms.Add(form)
        End Sub

        Private Sub form_Activated(ByVal sender As Object, ByVal e As EventArgs)
            OnActivePanelChanged(New DockablePanelEventArgs(TryCast(sender, Form).Name))
        End Sub


    End Class
End Namespace

SimpleHeaderControl.vb

Imports DotSpatial.Controls.Header
Imports System.ComponentModel.Composition

Namespace GISProject
    <Export(GetType(IHeaderControl))> _
    Public Class SimpleHeaderControl
        Inherits MenuBarHeaderControl
        Implements IPartImportsSatisfiedNotification


        Private toolStripContainer1 As ToolStripContainer

        <Import("Shell", GetType(ContainerControl))> _
        Private Property Shell() As ContainerControl
            Get
                Return m_Shell
            End Get
            Set(ByVal value As ContainerControl)
                m_Shell = value
            End Set
        End Property

        Private m_Shell As ContainerControl

        ''' 
        ''' Called when a part's imports have been satisfied and it is safe to use. (Shell will have a value)
        ''' 
        Public Sub OnImportsSatisfied() Implements IPartImportsSatisfiedNotification.OnImportsSatisfied
            Me.toolStripContainer1 = New ToolStripContainer()
            Me.toolStripContainer1.ContentPanel.SuspendLayout()
            Me.toolStripContainer1.SuspendLayout()

            Me.toolStripContainer1.Dock = DockStyle.Fill
            Me.toolStripContainer1.Name = "toolStripContainer1"

            ' place all of the controls that were on the form originally inside of our content panel.
            While Shell.Controls.Count > 0
                For Each control As Control In Shell.Controls
                    Me.toolStripContainer1.ContentPanel.Controls.Add(control)
                Next
            End While

            Shell.Controls.Add(Me.toolStripContainer1)

            Me.toolStripContainer1.ContentPanel.ResumeLayout(False)
            Me.toolStripContainer1.ResumeLayout(False)
            Me.toolStripContainer1.PerformLayout()

            Initialize(toolStripContainer1)
        End Sub

    End Class
End Namespace

SimpleStatusControl.vb

Imports System.ComponentModel
Imports System.ComponentModel.Composition
Imports System.Drawing
Imports System.Windows.Forms
Imports DotSpatial.Controls.Header

Namespace GISProject
    Public Class SimpleStatusControl
        Implements IStatusControl
        Implements IPartImportsSatisfiedNotification

        Private defaultStatusPanel As StatusPanel
        Private statusStrip As StatusStrip

        <Import("Shell", GetType(ContainerControl))> _
        Private Property Shell() As ContainerControl
            Get
                Return m_Shell
            End Get
            Set(ByVal value As ContainerControl)
                m_Shell = value
            End Set
        End Property
        Private m_Shell As ContainerControl

#Region "IPartImportsSatisfiedNotification Members"

        Public Sub OnImportsSatisfied() Implements IPartImportsSatisfiedNotification.OnImportsSatisfied
            statusStrip = New StatusStrip()

            statusStrip.Location = New Point(0, 285)
            statusStrip.Name = "statusStrip1"
            statusStrip.Size = New Size(508, 22)
            statusStrip.TabIndex = 0
            statusStrip.Text = [String].Empty

            'adding the status strip control
            Shell.Controls.Add(Me.statusStrip)

            'adding one initial status panel to the status strip control
            defaultStatusPanel = New StatusPanel()
            Me.Add(defaultStatusPanel)
        End Sub

#End Region

#Region "IStatusControl Members"

        ''' <summary>
        ''' Adds a status panel to the status strip
        ''' </summary>
        ''' <param name="panel">the user-specified status panel</param>
        Public Sub Add(ByVal panel As StatusPanel) Implements IStatusControl.Add
            Dim myLabel As New ToolStripStatusLabel()
            myLabel.Name = panel.Key
            myLabel.Text = panel.Caption
            myLabel.Width = panel.Width

            'panel.PropertyChanged += Function(sender As Object, e As PropertyChangedEventArgs) Do
            Dim item = TryCast(panel, StatusPanel)

            myLabel.Text = item.Caption
            myLabel.Width = item.Width

            statusStrip.Items.Add(myLabel)
        End Sub



        Public Sub Progress(ByVal key As String, ByVal percent As Integer, ByVal message As String) Implements IStatusControl.Progress
            defaultStatusPanel.Caption = message
            If Not statusStrip.InvokeRequired Then
                ' most actions happen on one thread and the status bar never repaints itself until the end of a process unless
                ' we call Application.DoEvents() or refresh the control.
                statusStrip.Refresh()
            End If
        End Sub

        Public Sub Remove(ByVal panel As StatusPanel) Implements IStatusControl.Remove
            statusStrip.Items.RemoveByKey(panel.Key)
        End Sub

#End Region

    End Class
End Namespace


i have only a problem with the extension manager who crashed when I browse the form... :(

 

Regards,

 

LS (Sorry for my bad english..)

Sep 22, 2012 at 3:44 AM

and what code you placed in your main form......  ?

the code u provided worked without errors but still didnt get the toolbox,.....  but thx already :o)

Sep 22, 2012 at 3:48 AM
A few questions......

did u have in your programm a toolbox?
and what headermenu/ribbon u used....

see screencapture, i made my own menu but cant get the toolbox working.... :o(

Somehow i am missing something obvious but dont know what...

Greetings Joska



From: [email removed]
To: [email removed]
Date: Fri, 21 Sep 2012 02:52:15 -0700
Subject: Re: implementing the toolbox is too hard [DotSpatial:395940]

From: LoupSolitaire
Hi Joska,

See below my three classes :

SimpleDocking.vb

Imports System.Collections.Generic
Imports System.Windows.Forms
Imports DotSpatial.Controls.Docking

Namespace GISProject
    ''' <summary>
    '''
    ''' </summary>
    Public Class SimpleDocking

        Implements IDockManager


        Private forms As New List(Of Form)()

#Region "IDockManager Members"

        ''' <summary>
        ''' Removes the specified panel.
        ''' </summary>
        ''' <param name="key">The key.</param>
        Public Sub Remove(ByVal key As String) Implements IDockManager.Remove
            For Each form As Form In forms
                If form.Name = key Then
                    form.Close()
                    forms.Remove(form)
                    Exit For
                End If
            Next
        End Sub

        ''' <summary>
        ''' Occurs when the active panel is changed.
        ''' </summary>
        Public Event ActivePanelChanged As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.ActivePanelChanged

        ''' <summary>
        ''' Selects the panel.
        ''' </summary>
        ''' <param name="key">The key.</param>
        Public Sub SelectPanel(ByVal key As String) Implements IDockManager.SelectPanel
        End Sub

        ''' <summary>
        ''' Adds the specified panel.
        ''' </summary>
        ''' <param name="panel"></param>
        Public Sub Add(ByVal panel As DockablePanel) Implements IDockManager.Add
            Add(panel.Key, panel.Caption, panel.InnerControl, panel.Dock)
        End Sub

        ''' <summary>
        ''' Resets the layout of the dock panels to a developer specified location.
        ''' </summary>
        Public Sub ResetLayout() Implements IDockManager.ResetLayout

        End Sub

        Public Sub HidePanel(ByVal Key As String) Implements IDockManager.HidePanel

        End Sub

        Public Event PanelClosed As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.PanelClosed

        Public Event PanelAdded As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.PanelAdded

        Public Event PanelRemoved As EventHandler(Of DockablePanelEventArgs) Implements IDockManager.PanelRemoved

#End Region

#Region "OnPanelRemoved"

        ''' <summary>
        ''' Triggers the PanelRemoved event.
        ''' </summary>
        Public Overridable Sub OnPanelRemoved(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent PanelRemoved(Nothing, ea)
        End Sub

#End Region

#Region "OnPanelAdded"

        ''' <summary>
        ''' Triggers the PanelAdded event.
        ''' </summary>
        Public Overridable Sub OnPanelAdded(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent PanelAdded(Nothing, ea)
        End Sub

#End Region

#Region "OnPanelClosed"

        ''' <summary>
        ''' Triggers the PanelClosed event.
        ''' </summary>
        Public Overridable Sub OnPanelClosed(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent PanelClosed(Nothing, ea)
        End Sub

#End Region

#Region "OnActivePanelChanged"

        ''' <summary>
        ''' Triggers the ActivePanelChanged event.
        ''' </summary>
        Public Overridable Sub OnActivePanelChanged(ByVal ea As DockablePanelEventArgs)
            'this
            RaiseEvent ActivePanelChanged(Nothing, ea)
        End Sub

#End Region

        ''' <summary>
        ''' Adds the specified panel.
        ''' </summary>
        ''' <param name="key">The key.</param>
        ''' <param name="caption">The caption of the panel and any tab button.</param>
        ''' <param name="panel">The panel.</param>
        ''' <param name="dockStyle">The dock location.</param>
        ''' 
        Public Sub Add(ByVal key As String, ByVal caption As String, ByVal panel As Control, ByVal dockStyle__1 As DockStyle)
            panel.Dock = DockStyle.Fill

            Dim form = New Form()
            form.Controls.Add(panel)
            form.Name = key
            form.Width = panel.Width
            form.Height = panel.Height
            form.Show()
            AddHandler form.Activated, AddressOf form_Activated
            forms.Add(form)
        End Sub

        Private Sub form_Activated(ByVal sender As Object, ByVal e As EventArgs)
            OnActivePanelChanged(New DockablePanelEventArgs(TryCast(sender, Form).Name))
        End Sub


    End Class
End Namespace


SimpleHeaderControl.vb

Imports DotSpatial.Controls.Header
Imports System.ComponentModel.Composition

Namespace GISProject
    <Export(GetType(IHeaderControl))> _
    Public Class SimpleHeaderControl
        Inherits MenuBarHeaderControl
        Implements IPartImportsSatisfiedNotification


        Private toolStripContainer1 As ToolStripContainer

        <Import("Shell", GetType(ContainerControl))> _
        Private Property Shell() As ContainerControl
            Get
                Return m_Shell
            End Get
            Set(ByVal value As ContainerControl)
                m_Shell = value
            End Set
        End Property

        Private m_Shell As ContainerControl

        ''' 
        ''' Called when a part's imports have been satisfied and it is safe to use. (Shell will have a value)
        ''' 
        Public Sub OnImportsSatisfied() Implements IPartImportsSatisfiedNotification.OnImportsSatisfied
            Me.toolStripContainer1 = New ToolStripContainer()
            Me.toolStripContainer1.ContentPanel.SuspendLayout()
            Me.toolStripContainer1.SuspendLayout()

            Me.toolStripContainer1.Dock = DockStyle.Fill
            Me.toolStripContainer1.Name = "toolStripContainer1"

            ' place all of the controls that were on the form originally inside of our content panel.
            While Shell.Controls.Count > 0
                For Each control As Control In Shell.Controls
                    Me.toolStripContainer1.ContentPanel.Controls.Add(control)
                Next
            End While

            Shell.Controls.Add(Me.toolStripContainer1)

            Me.toolStripContainer1.ContentPanel.ResumeLayout(False)
            Me.toolStripContainer1.ResumeLayout(False)
            Me.toolStripContainer1.PerformLayout()

            Initialize(toolStripContainer1)
        End Sub

    End Class
End Namespace


SimpleStatusControl.vb

Imports System.ComponentModel
Imports System.ComponentModel.Composition
Imports System.Drawing
Imports System.Windows.Forms
Imports DotSpatial.Controls.Header

Namespace GISProject
    Public Class SimpleStatusControl
        Implements IStatusControl
        Implements IPartImportsSatisfiedNotification

        Private defaultStatusPanel As StatusPanel
        Private statusStrip As StatusStrip

        <Import("Shell", GetType(ContainerControl))> _
        Private Property Shell() As ContainerControl
            Get
                Return m_Shell
            End Get
            Set(ByVal value As ContainerControl)
                m_Shell = value
            End Set
        End Property
        Private m_Shell As ContainerControl

#Region "IPartImportsSatisfiedNotification Members"

        Public Sub OnImportsSatisfied() Implements IPartImportsSatisfiedNotification.OnImportsSatisfied
            statusStrip = New StatusStrip()

            statusStrip.Location = New Point(0, 285)
            statusStrip.Name = "statusStrip1"
            statusStrip.Size = New Size(508, 22)
            statusStrip.TabIndex = 0
            statusStrip.Text = [String].Empty

            'adding the status strip control
            Shell.Controls.Add(Me.statusStrip)

            'adding one initial status panel to the status strip control
            defaultStatusPanel = New StatusPanel()
            Me.Add(defaultStatusPanel)
        End Sub

#End Region

#Region "IStatusControl Members"

        ''' <summary>
        ''' Adds a status panel to the status strip
        ''' </summary>
        ''' <param name="panel">the user-specified status panel</param>
        Public Sub Add(ByVal panel As StatusPanel) Implements IStatusControl.Add
            Dim myLabel As New ToolStripStatusLabel()
            myLabel.Name = panel.Key
            myLabel.Text = panel.Caption
            myLabel.Width = panel.Width

            'panel.PropertyChanged += Function(sender As Object, e As PropertyChangedEventArgs) Do
            Dim item = TryCast(panel, StatusPanel)

            myLabel.Text = item.Caption
            myLabel.Width = item.Width

            statusStrip.Items.Add(myLabel)
        End Sub



        Public Sub Progress(ByVal key As String, ByVal percent As Integer, ByVal message As String) Implements IStatusControl.Progress
            defaultStatusPanel.Caption = message
            If Not statusStrip.InvokeRequired Then
                ' most actions happen on one thread and the status bar never repaints itself until the end of a process unless
                ' we call Application.DoEvents() or refresh the control.
                statusStrip.Refresh()
            End If
        End Sub

        Public Sub Remove(ByVal panel As StatusPanel) Implements IStatusControl.Remove
            statusStrip.Items.RemoveByKey(panel.Key)
        End Sub

#End Region

    End Class
End Namespace



i have only a problem with the extension manager who crashed when I browse the form... :(

Regards,

LS (Sorry for my bad english..)
Read the full discussion online.
To add a post to this discussion, reply to this email (DotSpatial@discussions.codeplex.com)
To start a new discussion for this project, email DotSpatial@discussions.codeplex.com
You are receiving this email because you subscribed to this discussion on CodePlex. You can unsubscribe on CodePlex.com.
Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at CodePlex.com
Sep 24, 2012 at 11:01 AM

Hi Joska,

 

In my main form I put this code :

 

Public Class Form1
    Inherits Form

    <Export("Shell", GetType(ContainerControl))> _
    Private Shared Shell As ContainerControl

    Public Sub New()

        InitializeComponent()

        Shell = Me
        App.LoadExtensions()

    End Sub

End Class

Sep 24, 2012 at 11:58 PM
Edited Sep 24, 2012 at 11:59 PM

pfff i tried so many ways and now    one worked..... now i face a different problem....   where my own my tabbed control and toolstrip fight for space when docked=filled

Oct 11, 2012 at 9:19 AM

it seems its really hard to get this to be done...:(

Oct 11, 2012 at 1:33 PM
Edited Oct 11, 2012 at 1:33 PM

For me it didnt work when i added the legend and the toolbox upon a tabbed-control.....   but yes   it would be nice if there was a simple project with all basic needs working on it.....