Springen naar inhoud


- - - - -
VS 2013

Property Maken



  • Log in a.u.b. om te beantwoorden
Er zijn 13 reacties in dit onderwerp

#1 sunny

sunny

    Starting Developer

  • Leden
  • 7 berichten
    Laatst bezocht gisteren, 20:20
  • LocatieNederland

Geplaatst op 28 maart 2017 - 20:58

Goedendag allen

Ik wil een property maken waar ik een "pull down list" krijg waar ik dan een keuze kan maken.
Nu heb ik al van alles geprobeerd zoals een "list of string" , array, arraylist. Maar ik krijg het niet voor elkaar.
elke keer kan ik niet compilen of krijg in de property te zien dat het niet het goede type is ofzo.
Dit is een voorbeeld van wat ik heb geprobeerd:

Visual Basic Code:
Dim m_EnableWhite As Boolean = True
Private m_EnableWhitecollor As New ArrayList(Collors)
Dim Collors As New ArrayList()
Collors.add("AMBER")
Collors.add("YELLOW")
Public Property LightWhiteEnable As List(Of String)

Get
Return m_EnableWhitecollor

End Get
Set(ByVal value As List(Of String))
Dim collor() As String
collor = value
If value = "White" Then
m_EnableWhite = True
Else
m_EnableWhite = False
SetLightCount()
End If
End Set

End Property

Kan iemand mij helpen? Bij voorbaat dank.
Groet Marcel

#2 Dirk Andries

Dirk Andries

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 29 maart 2017 - 00:33

 sunny, op 28 maart 2017 - 20:58, zei:

Ik wil een property maken waar ik een "pull down list" krijg waar ik dan een keuze kan maken.

Bedoel je design-time?
Trust me, I have no idea what I'm talking about.

#3 Dirk Andries

Dirk Andries

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 29 maart 2017 - 09:33

Bericht bekijkensunny, op 28 maart 2017 - 20:58, zei:

Ik wil een property maken waar ik een "pull down list" krijg waar ik dan een keuze kan maken.
Bedoel je een control?
Wil je herformuleren wat je precies wil, want ik krijg hier kop noch staart aan.
Trust me, I have no idea what I'm talking about.

#4 sunny

sunny

    Starting Developer

  • Leden
  • 7 berichten
    Laatst bezocht gisteren, 20:20
  • LocatieNederland

Geplaatst op 29 maart 2017 - 20:08

Hoi Dirk

Ik heb een control waar ik een property bij wil maken. Met deze property wil ik een keuze maken uit diverse kleuren.
Dus naast de property een knopje met pijltje naar beneden en als je daar op drukt kan je kiezen welke kleur je wilt hebben.
Volgens mij kan dat met een combobox, maar dat krijg ik niet voor elkaar om die in een property te "zetten".

Groet Marcel

#5 Dirk Andries

Dirk Andries

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 29 maart 2017 - 20:47

Bericht bekijkensunny, op 29 maart 2017 - 20:08, zei:

Ik heb een control waar ik een property bij wil maken. Met deze property wil ik een keuze maken uit diverse kleuren.
Dus naast de property een knopje met pijltje naar beneden en als je daar op drukt kan je kiezen welke kleur je wilt hebben.
Volgens mij kan dat met een combobox, maar dat krijg ik niet voor elkaar om die in een property te "zetten".

Design Time en/of Run Time?
Windows Forms?

Ik heb jaren geleden als voorbeeld voor een les een KleurenKiezer custom control gemaakt voor Windows.Forms in vb.net
Misschien is dat iets? Ik weet niet zeker of ik dat nog liggen heb, maar ik wil wel even zoeken.
Er was ook een video bij, maar die kan ik alvast niet meer vinden.
Trust me, I have no idea what I'm talking about.

#6 sunny

sunny

    Starting Developer

  • Leden
  • 7 berichten
    Laatst bezocht gisteren, 20:20
  • LocatieNederland

Geplaatst op 29 maart 2017 - 20:58

windows forms.

Als je dat voorbeeld nog hebt liggen zou dat denk ik erg helpen.
Alvast bedankt voor alle hulp.

#7 Dirk Andries

Dirk Andries

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 30 maart 2017 - 14:10

Bericht bekijkensunny, op 29 maart 2017 - 20:58, zei:

Als je dat voorbeeld nog hebt liggen zou dat denk ik erg helpen.
Kan het niet meer vinden.

Bericht bekijkensunny, op 29 maart 2017 - 20:08, zei:

Ik heb een control waar ik een property bij wil maken.
Dat is geen probleem.

Bericht bekijkensunny, op 29 maart 2017 - 20:08, zei:

Met deze property wil ik een keuze maken uit diverse kleuren.
Dat volg ik niet zo goed. Ik kan me niet voorstellen hoe een property een keuze kan maken.
Bedoel je : een property die een lijst van mogelijkheden kan geven?

Bericht bekijkensunny, op 29 maart 2017 - 20:08, zei:

Dus naast de property een knopje met pijltje naar beneden en als je daar op drukt kan je kiezen welke kleur je wilt hebben.
Dit is de derde maal dat ik dit vraag: bedoel je design-time?
Dus de waarde instellen door (design-time) in het property-grid een combobox aan te bieden.
Dat kan wel.

Run-time kan dat uiteraard niet: een property heeft geen knopje.
Een control <> property.

Bericht bekijkensunny, op 29 maart 2017 - 20:08, zei:

Volgens mij kan dat met een combobox, maar dat krijg ik niet voor elkaar om die in een property te "zetten".
Je kan geen combobox (control) in een property (class member) krijgen.
Je kan wel een combobox in een andere control (customcontrol of usercontrol) toevoegen, die bij selectie de waarde van een andere property gaat bepalen.

Bericht bekijkensunny, op 29 maart 2017 - 20:58, zei:

Alvast bedankt voor alle hulp.
Ik wil je wel helpen, en kan dat zeer waarschijnlijk ook, maar dan moet je me wel concreter vertellen wat je precies wil doen.

Je zegt bijvoorbeeld "Ik heb een control".
Toon bijvoorbeeld de code?
Trust me, I have no idea what I'm talking about.

#8 sunny

sunny

    Starting Developer

  • Leden
  • 7 berichten
    Laatst bezocht gisteren, 20:20
  • LocatieNederland

Geplaatst op 30 maart 2017 - 20:46

Hoi Dirk

Ten eerste wil ik je alvast bedanken voor alle hulp (zoals je ziet heb ik geen verstand van VB.net).

Klopt ik wil een property maken IN design-time waar ik dan een keuze kan maken uit een lijst van mogelijk heden (in mijn geval kleuren).
Wat ik wil maken is een signaal lamp toren. Er kunnen 5 lampen op elkaar. Als je de signaal toren in het windows form sleept kan je in de property's een kiezen waarmee de lamp moet gaan werken. Bijvoorbeeld rood dan is de lamp donker rood als tie uit is en licht rood als tie aan is. Deze signaal toren is al gemaakt door derden (gevonden op internet) nu wil ik de code zo aanpassen dat ik die keuze kan maken welke kleur ik de lamp wil laten branden.

Code:
Imports System.Drawing
Public Class StackLight2
	Inherits System.Windows.Forms.Control
	Public Event LightGreenValueChanged As EventHandler
	Public Event LightAmberValueChanged As EventHandler
	Public Event LightRedValueChanged As EventHandler
	'* Images for the Base and Cap which never change
	Private StaticImage, StaticImage2 As Bitmap
	'* Images for each light represented as On and Off
	Private LightImages(7) As Bitmap
	'* Pointers to current active images
	Private ActiveGreenImage, ActiveAmberImage, ActiveBlueImage, ActiveRedImage As Bitmap
	'* Used for scaling the source images to the current control size
	Private ImageRatio As Single
	Private TextRectangle As Rectangle
	Private sf As StringFormat
	Private TextBrush As SolidBrush
#Region "Constructor"
	Public Sub New()
		MyBase.New()
		'* reduce the flicker
		Me.SetStyle(System.Windows.Forms.ControlStyles.OptimizedDoubleBuffer Or
					System.Windows.Forms.ControlStyles.AllPaintingInWmPaint Or
					System.Windows.Forms.ControlStyles.UserPaint Or
					System.Windows.Forms.ControlStyles.SupportsTransparentBackColor, True)

		ForeColor = System.Drawing.Color.White
		TextBrush = New SolidBrush(MyBase.ForeColor)
		sf = New StringFormat
		sf.Alignment = StringAlignment.Center
		sf.LineAlignment = StringAlignment.Center
		RefreshImage()
	End Sub
	Protected Overrides Sub Dispose(ByVal disposing As Boolean)
		Try
			If disposing Then
				TextBrush.Dispose()
				sf.Dispose()
				If StaticImage2 IsNot Nothing Then StaticImage2.Dispose()
				If StaticImage IsNot Nothing Then StaticImage.Dispose()
				For index = 0 To LightImages.Length - 1
					If LightImages(index) IsNot Nothing Then LightImages(index).Dispose()
				Next
			End If
		Finally
			MyBase.Dispose(disposing)
		End Try
	End Sub
#End Region
#Region "Properties"
	Private m_ValueGreen As Boolean
	Public Property LightGreenValue() As Boolean
		Get
			Return m_ValueGreen
		End Get
		Set(ByVal value As Boolean)
			If value <> m_ValueGreen Then
				m_ValueGreen = value
				If m_ValueGreen Then
					ActiveGreenImage = LightImages(1)
				Else
					ActiveGreenImage = LightImages(0)
				End If
				Me.Invalidate()
				OnLightGreenValueChanged(System.EventArgs.Empty)
			End If
		End Set
	End Property
	Private m_EnableGreen As Boolean = True
	Public Property LightGreenEnable() As Boolean
		Get
			Return m_EnableGreen
		End Get
		Set(ByVal value As Boolean)
			If value <> m_EnableGreen Then
				m_EnableGreen = value
				SetLightCount()
			End If
		End Set
	End Property
	Private m_ValueAmber As Boolean
	Public Property LightAmberValue() As Boolean
		Get
			Return m_ValueAmber
		End Get
		Set(ByVal value As Boolean)
			If value <> m_ValueAmber Then
				m_ValueAmber = value
				If m_ValueAmber Then
					ActiveAmberImage = LightImages(3)
				Else
					ActiveAmberImage = LightImages(2)
				End If
				Me.Invalidate()
				OnLightAmberValueChanged(System.EventArgs.Empty)
			End If
		End Set
	End Property
	Private m_EnableAmber As Boolean = True
	Public Property LightAmberEnable() As Boolean
		Get
			Return m_EnableAmber
		End Get
		Set(ByVal value As Boolean)
			If value <> m_EnableAmber Then
				m_EnableAmber = value
				SetLightCount()
			End If
		End Set
	End Property
	Private m_ValueBlue As Boolean
	Public Property LightBlueValue() As Boolean
		Get
			Return m_ValueBlue
		End Get
		Set(ByVal value As Boolean)
			If value <> m_ValueBlue Then
				m_ValueBlue = value
				If m_ValueBlue Then
					ActiveBlueImage = LightImages(5)
				Else
					ActiveBlueImage = LightImages(4)
				End If
				Me.Invalidate()
				OnLightBlueValueChanged(System.EventArgs.Empty)
			End If
		End Set
	End Property
	Private m_EnableBlue As Boolean = True
	Public Property LightBlueEnable() As Boolean
		Get
			Return m_EnableBlue
		End Get
		Set(ByVal value As Boolean)
			If value <> m_EnableBlue Then
				m_EnableBlue = value
				SetLightCount()
			End If
		End Set
	End Property
	Private m_ValueRed As Boolean
	Public Property LightRedValue() As Boolean
		Get
			Return m_ValueRed
		End Get
		Set(ByVal value As Boolean)
			If value <> m_ValueRed Then
				m_ValueRed = value
				If m_ValueRed Then
					ActiveRedImage = LightImages(7)
				Else
					ActiveRedImage = LightImages(6)
				End If
				Me.Invalidate()
				OnLightRedValueChanged(System.EventArgs.Empty)
			End If
		End Set
	End Property
	Private m_EnableRed As Boolean = True
	Public Property LightRedEnable() As Boolean
		Get
			Return m_EnableRed
		End Get
		Set(ByVal value As Boolean)
			If value <> m_EnableRed Then
				m_EnableRed = value
				SetLightCount()
			End If
		End Set
	End Property

	<System.ComponentModel.Browsable(True)>
	<System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Visible)>
	Public Overrides Property Text() As String
		Get
			Return MyBase.Text
		End Get
		Set(ByVal value As String)
			MyBase.Text = value
			Me.Invalidate()
		End Set
	End Property
	'* These next properties are overriden so that we can refresh the image when changed
	<System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Visible)>
	Public Overrides Property Font() As Font
		Get
			Return MyBase.Font
		End Get
		Set(ByVal value As Font)
			MyBase.Font = value
			Me.Invalidate()
		End Set
	End Property
	<System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Visible)>
	Public Overrides Property ForeColor() As Color
		Get
			Return MyBase.ForeColor
		End Get
		Set(ByVal value As Color)
			If TextBrush Is Nothing Then
				TextBrush = New SolidBrush(MyBase.ForeColor)
			Else
				TextBrush.Color = value
			End If
			MyBase.ForeColor = value
			Me.Invalidate()
		End Set
	End Property
#End Region
#Region "Events"
	'*************************************************************************
	'*
	'**************************************************************************
	Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
		If StaticImage Is Nothing Or StaticImage2 Is Nothing Then Exit Sub
		Dim g As Graphics = e.Graphics
		Dim Position As Integer
		Try
			If m_EnableRed Then
				g.DrawImage(ActiveRedImage, 0, Convert.ToInt32(StaticImage2.Height + Position))
				Position += ActiveRedImage.Height
			End If
			If m_EnableBlue Then
				g.DrawImage(ActiveBlueImage, 0, Convert.ToInt32(StaticImage2.Height + Position))
				Position += ActiveBlueImage.Height
			End If

			If m_EnableAmber Then
				g.DrawImage(ActiveAmberImage, 0, Convert.ToInt32((StaticImage2.Height + Position)))
				Position += ActiveAmberImage.Height
			End If
			If m_EnableGreen Then
				g.DrawImage(ActiveGreenImage, 0, Convert.ToInt32((StaticImage2.Height + Position)))
				Position += ActiveGreenImage.Height
			End If
			'Draw the base
			g.DrawImage(StaticImage, 0, Convert.ToInt32((StaticImage2.Height + Position)))
			'* Draw the cap
			g.DrawImage(StaticImage2, 0, 0)
			If MyBase.Text IsNot Nothing AndAlso (String.Compare(MyBase.Text, "") <> 0) Then
				If TextBrush.Color <> MyBase.ForeColor Then
					TextBrush.Color = MyBase.ForeColor
				End If
				g.DrawString(MyBase.Text, MyBase.Font, TextBrush, TextRectangle, sf)
				'* Debugging - draw a rectangle to see exactly where the text is to be
				'g.DrawRectangle(Pens.Red, TextRectangle)
			End If
		Catch
		End Try
	End Sub

	Protected Overridable Sub OnLightGreenValueChanged(ByVal e As EventArgs)
		RaiseEvent LightGreenValueChanged(Me, e)
	End Sub
	Protected Overridable Sub OnLightAmberValueChanged(ByVal e As EventArgs)
		RaiseEvent LightAmberValueChanged(Me, e)
	End Sub
	Protected Overridable Sub OnLightBlueValueChanged(ByVal e As EventArgs)
		RaiseEvent LightAmberValueChanged(Me, e)
	End Sub
	Protected Overridable Sub OnLightRedValueChanged(ByVal e As EventArgs)
		RaiseEvent LightRedValueChanged(Me, e)
	End Sub
	Protected Overrides Sub onresize(e As EventArgs)
		MyBase.onresize(e)
		RefreshImage()
	End Sub
#End Region
#Region "Private Methods"
	Private LightCount As Integer = 4
	Private Sub SetLightCount()
		LightCount = 0
		If m_EnableAmber Then LightCount += 1
		If m_EnableRed Then LightCount += 1
		If m_EnableGreen Then LightCount += 1
		If m_EnableBlue Then LightCount += 1

		RefreshImage()
		Me.Invalidate()
	End Sub
	Private Sub RefreshImage()
		'********************************************************
		'* Calculate the scaling for the images
		'********************************************************
		Dim TotalHeight As Single
		Try
			Dim WidthRatio As Single = CSng(Me.Width) / CSng(My.Resources.StackLightBase.Width)
			TotalHeight = My.Resources.StackLightBase.Height + My.Resources.StackLightCap.Height
			TotalHeight += My.Resources.StackLightElementGray.Height * LightCount
			Dim HeightRatio As Single = CSng(Height) / CSng(TotalHeight)
			If WidthRatio < HeightRatio Then
				ImageRatio = WidthRatio
			Else
				ImageRatio = HeightRatio
			End If
		Catch
		End Try
		'* Prevent exceptions
		If ImageRatio <= 0 Then Exit Sub
		'****************************************************************
		' Scale the image so it will draw faster in Paint event
		'****************************************************************
		' Make a bitmap for the result.
		' The Base image will be stored in StaticImage
		If StaticImage IsNot Nothing Then StaticImage.Dispose()
		StaticImage = New Bitmap(Convert.ToInt32(My.Resources.StackLightBase.Width * ImageRatio), Convert.ToInt32(My.Resources.StackLightBase.Height * ImageRatio))
		' Make a Graphics object for the result Bitmap.
		Using gr_dest As Graphics = Graphics.FromImage(StaticImage)
			' Copy the source image into the destination bitmap.
			gr_dest.DrawImage(My.Resources.StackLightBase, 0, 0, StaticImage.Width, Convert.ToInt32(StaticImage.Width / My.Resources.StackLightBase.Width * My.Resources.StackLightBase.Height))

			TextRectangle.X = 1
			TextRectangle.Width = StaticImage.Width - 2
			TextRectangle.Y = Convert.ToInt32(TotalHeight * 0.82 * ImageRatio)
			TextRectangle.Height = Convert.ToInt32(TotalHeight * 0.16 * ImageRatio)
		End Using

		'* Draw the cap to scaled size
		If StaticImage2 IsNot Nothing Then StaticImage2.Dispose()
		StaticImage2 = New Bitmap(Convert.ToInt32(My.Resources.StackLightCap.Width * ImageRatio), Convert.ToInt32(My.Resources.StackLightCap.Height * ImageRatio))
		' Make a Graphics object for the result Bitmap.
		Using gr_dest As Graphics = Graphics.FromImage(StaticImage2)
			' Copy the source image into the destination bitmap.
			gr_dest.DrawImage(My.Resources.StackLightCap, 0, 0, StaticImage.Width,
							  Convert.ToInt32(StaticImage.Width / My.Resources.StackLightBase.Width * My.Resources.StackLightCap.Height))
		End Using
		Dim targetRectangle As Rectangle
		'* Create the bitmaps to hold all On and Off images
		For index = 0 To LightImages.Length - 1
			LightImages(index) = New Bitmap(StaticImage.Width, Convert.ToInt32(My.Resources.StackLightElementGray.Height * ImageRatio))
		Next
		'* Create the rectangle for scaling
		targetRectangle = New Rectangle(0, 0, LightImages(0).Width, LightImages(0).Height)
		'* attributes for changing color
		Using ColorChangeAttribute As System.Drawing.Imaging.ImageAttributes = New System.Drawing.Imaging.ImageAttributes()
			'***************************
			'* Green Light
			'***************************
			Try
				'****************************
				'* OFF COLOR
				'* First row reduces red
				'* Second row increases green
				'* Third row reduces blue
				Dim OffMatrix As Single()() = {New Single() {0.25, 0, 0, 0, 0},
											   New Single() {0, 0.5, 0, 0, 0},
											   New Single() {0, 0, 0.25, 0, 0},
											   New Single() {0, 0, 0, 1, 0},
											   New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OffMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(0))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
				'******************************
				'* ON COLOR
				'* First row reduces red
				'* Second row increases green
				'* Third row reduces blue
				Dim OnMatrix As Single()() = {New Single() {0.25, 0, 0, 0, 0},
											  New Single() {0, 2.5, 0, 0, 0},
											  New Single() {0, 0, 0.25, 0, 0},
											  New Single() {0, 0, 0, 1, 0},
											  New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OnMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(1))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
			Catch
			End Try
			'***************************
			'* Amber Light
			'***************************
			Try
				'****************************
				'* OFF COLOR
				'* First row increases red
				'* Second row increases green
				'* Third row reduces blue
				Dim OffMatrix As Single()() = {New Single() {0.5, 0, 0, 0, 0},
											   New Single() {0, 0.5, 0, 0, 0},
											   New Single() {0, 0, 0.25, 0, 0},
											   New Single() {0, 0, 0, 1, 0},
											   New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OffMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(2))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
				'******************************
				'* ON COLOR
				'* First row increases red
				'* Second row increases green
				'* Third row reduces blue
				Dim OnMatrix As Single()() = {New Single() {2.5, 0, 0, 0, 0},
											  New Single() {0, 2.5, 0, 0, 0},
											  New Single() {0, 0, 0.25, 0, 0},
											  New Single() {0, 0, 0, 1, 0},
											  New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OnMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(3))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
			Catch
			End Try
			'***************************
			'* Blue Light
			'***************************
			Try
				'****************************
				'* OFF COLOR
				'* First row reduces red
				'* Second row reduces green
				'* Third row increases blue
				Dim OffMatrix As Single()() = {New Single() {0.25, 0, 0, 0, 0},
											   New Single() {0, 0.25, 0, 0, 0},
											   New Single() {0, 0, 0.5, 0, 0},
											   New Single() {0, 0, 0, 1, 0},
											   New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OffMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(4))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
				'******************************
				'* ON COLOR
				'* First row reduces red
				'* Second row reduces green
				'* Third row increases blue
				Dim OnMatrix As Single()() = {New Single() {0.25, 0, 0, 0, 0},
											  New Single() {0, 0.25, 0, 0, 0},
											  New Single() {0, 0, 2.5, 0, 0},
											  New Single() {0, 0, 0, 1, 0},
											  New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OnMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(5))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
			Catch
			End Try
			'***************************
			'* Red Light
			'***************************
			Try
				'****************************
				'* OFF COLOR
				'* First row reduces red
				'* Second row increases green
				'* Third row reduces blue
				Dim OffMatrix As Single()() = {New Single() {0.5, 0, 0, 0, 0},
											   New Single() {0, 0.25, 0, 0, 0},
											   New Single() {0, 0, 0.25, 0, 0},
											   New Single() {0, 0, 0, 1, 0},
											   New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OffMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(6))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
				'******************************
				'* ON COLOR
				'* First row increases red
				'* Second row reduces green
				'* Third row reduces blue
				Dim OnMatrix As Single()() = {New Single() {2.5, 0, 0, 0, 0},
											  New Single() {0, 0.25, 0, 0, 0},
											  New Single() {0, 0, 0.25, 0, 0},
											  New Single() {0, 0, 0, 1, 0},
											  New Single() {0, 0, 0, 0, 1}}
				ColorChangeAttribute.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(OnMatrix))
				Using gr_dest As Graphics = Graphics.FromImage(LightImages(7))
					gr_dest.DrawImage(My.Resources.StackLightElementGray, targetRectangle, 0, 0,
									  My.Resources.StackLightElementGray.Width, My.Resources.StackLightElementGray.Height,
									  GraphicsUnit.Pixel, ColorChangeAttribute)
				End Using
			Catch
			End Try

		End Using
		SetActiveImages()
	End Sub
	'********************************************************
	'* Point the image variables to the correct light states
	'********************************************************
	Private Sub SetActiveImages()
		'* Set active image
		If m_ValueGreen Then
			ActiveGreenImage = LightImages(1)
		Else
			ActiveGreenImage = LightImages(0)
		End If
		If m_ValueAmber Then
			ActiveAmberImage = LightImages(3)
		Else
			ActiveAmberImage = LightImages(2)
		End If
		If m_ValueBlue Then
			ActiveBlueImage = LightImages(5)
		Else
			ActiveBlueImage = LightImages(4)
		End If
		If m_ValueRed Then
			ActiveRedImage = LightImages(7)
		Else
			ActiveRedImage = LightImages(6)
		End If
	End Sub
#End Region
End Class



Ik hoop dat je hier iets aan hebt.

Groeten Marcel

#9 Dirk Andries

Dirk Andries

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 03 april 2017 - 11:58

Bericht bekijkensunny, op 30 maart 2017 - 20:46, zei:

Visual Basic Code:
' veel code

Ik hoop dat je hier iets aan hebt.

Resources e.d. ontbreken.
Kan je het component niet uploaden (.zip)
Of de url waar ik het kan vinden.
Dan kan ik  het uitproberen.

Indien niet, kan ik je een voorbeeld maken dat enkel toont hoe je de status design time kan bepalen met combobox (al kan je dat volgens mij nu toch ook al met de boolean properties).
Trust me, I have no idea what I'm talking about.

#10 sunny

sunny

    Starting Developer

  • Leden
  • 7 berichten
    Laatst bezocht gisteren, 20:20
  • LocatieNederland

Geplaatst op 04 april 2017 - 20:09

Klopt met de booleans is het geen probleem, maar ik wil een keuze kunnen maken uit 5 of meer kleuren.
Volgens mij dat voorbeeld waar jij het over hebt met combobox is wat ik zoek. Daar kan ik toch een lijst met items in maken?
Het component is onderdeel van een groter project en verscheidene resources zitten verborgen in een dll in dat project.
Het project kan downloaden op:
https://sourceforge....ource=directory

Alvast hartelijk dank voor alle moeite.

#11 Dirk Andries

Dirk Andries

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 07 april 2017 - 16:36

Bericht bekijkensunny, op 04 april 2017 - 20:09, zei:

Klopt met de booleans is het geen probleem, maar ik wil een keuze kunnen maken uit 5 of meer kleuren.
Volgens mij dat voorbeeld waar jij het over hebt met combobox is wat ik zoek. Daar kan ik toch een lijst met items in maken?
Het component is onderdeel van een groter project en verscheidene resources zitten verborgen in een dll in dat project.
Het project kan downloaden op:
https://sourceforge....ource=directory

Alvast hartelijk dank voor alle moeite.

De eenvoudigste oplossing voor jou is een enum.
Die komt automagisch in een dropdown terecht.
Ik heb een componentje (in bijlage, VS 2017) gebrouwen om dat te demonstreren heb het proces vastgelegd (helaas vergeten klank aan te zetten, maar heb dat achteraf proberen reparareren).



Bijlage  ControlDropDownTest.zip   13,25K   2 downloads
Trust me, I have no idea what I'm talking about.

#12 sunny

sunny

    Starting Developer

  • Leden
  • 7 berichten
    Laatst bezocht gisteren, 20:20
  • LocatieNederland

Geplaatst op 13 april 2017 - 21:04

Goedendag Dirk,

Ten eerste hartelijk dank voor je hulp. Vooral dat youtube filmpje. Daar had ik veel aan.
Maar nu zit ik met het volgende probleem. Ik heb een enum aan gemaakt die doet het ook.
Als ik de control op het form zet zie ik alle lampen (ook deze de witte). Als ik in de drop down list wit kies is alles oke en blijft de lamp zichtbaar.
Als ik None of een van de andere kleuren kies gaat de lamp weg. (tot zover ook nog goed) Maar als ik daarna weer de witte lamp selecteer wordt die niet meer zichtbaar.
Het zal iets kleins zijn maar ik zie het niet.
Dit is de code die ik nu heb (de enum is helemaal onderaan gedeclareerd).


Visual Basic Code:
Dim m_EnableWhite As Boolean = True
	Private position_5 As Color5
	Public Property StackPosition5 As Color5
		Get
			Return position_5

		End Get
		Set(ByVal value As Color5)
			If value <> position_5 Then
				position_5 = value

				If value = Color5.WHITE Then
					m_EnableWhite = True
				Else
					m_EnableWhite = False
					SetLightCount()
				End If
			End If
		End Set

	End Property

Alvast hartelijk dank.
Marcel

#13 Dirk Andries

Dirk Andries

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 18 april 2017 - 09:37

Bericht bekijkensunny, op 13 april 2017 - 21:04, zei:

Maar nu zit ik met het volgende probleem. Ik heb een enum aan gemaakt die doet het ook.
Als ik de control op het form zet zie ik alle lampen (ook deze de witte). Als ik in de drop down list wit kies is alles oke en blijft de lamp zichtbaar.
Als ik None of een van de andere kleuren kies gaat de lamp weg. (tot zover ook nog goed) Maar als ik daarna weer de witte lamp selecteer wordt die niet meer zichtbaar.
Het zal iets kleins zijn maar ik zie het niet.
Dit is de code die ik nu heb (de enum is helemaal onderaan gedeclareerd).


Visual Basic Code:
Dim m_EnableWhite As Boolean = True
	Private position_5 As Color5
	Public Property StackPosition5 As Color5
		Get
			Return position_5

		End Get
		Set(ByVal value As Color5)
			If value <> position_5 Then
				position_5 = value

				If value = Color5.WHITE Then
					m_EnableWhite = True
				Else
					m_EnableWhite = False
					SetLightCount()
				End If
			End If
		End Set

	End Property




Ik denk dat de setter enkel zal updaten (SetLightCount) als je Color5.WHITE uit zet.
Verplaats de SetLightCount buiten de if ?
Dus:

Visual Basic Code:
		 Set(ByVal value As Color5)
			 If value <> position_5 Then
				 position_5 = value
	
				 If value = Color5.WHITE Then
					 m_EnableWhite = True
				 Else
					 m_EnableWhite = False
				 End If
				 SetLightCount() ' deze verplaatst buiten de if
			 End If
		 End Set



Dat kan dan korter:
Visual Basic Code:
		 Set(ByVal value As Color5)
			 If value <> position_5 Then
				 position_5 = value
				 m_EnableWhite = value = Color5.WHITE
				 SetLightCount()
			 End If
		 End Set



Noteer: bovenstaande is code rechtstreeks ingetikt in deze web editor, dus niet geteste code.

Nog een overweging: misschien moet je ook position_5 aanpassen als je 1 van de andere (boolean) properties gaat verzetten. Als je de stand van alle properties consistent wil houden.
Misschien kan je wel zonder dat backing field position_5?
Trust me, I have no idea what I'm talking about.

#14 sunny

sunny

    Starting Developer

  • Leden
  • 7 berichten
    Laatst bezocht gisteren, 20:20
  • LocatieNederland

Geplaatst op 20 april 2017 - 20:59

Hoi Dirk

De setlightcount() buiten de If zetten deed de truc. Dank u wel.
Nu de rest van de control verbouwen zoals ik hem hebben wil.
Alvast hartelijk dank voor alle hulp.





Ook met taq VS 2013 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2013] Untitled 1

Met dank aan PascalBianca die tot op heden alles bijhoud sinds anno dec 2010)
Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
vbib.be - vbnet.be - vbdotnet.be - visualbasic.be