Mit meinem neuen Laptop habe ich auch ein neues Betriebssystem bekommen. Mein alter hatte Windows XP 32 Bit und der neue nun Windows 7 64 Bit. Nach der Installation von Visual Studio meldet sich der Debugger andauernd, dass ich nichts mehr editieren kann, das ging doch früher? Ebenso gibt es Probleme bei der Verwendung meines Connectionstrings zur MySql DB. Fehlermeldung nach dem Start des Programms: Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben. Und das obwohl ich meinen Connector und auch einen MySql Server installiert habe.
Lösung:
Unter Projekt auf Eigenschaften gehen. Hier nun im Kompilieren Dialog den Button Erweiterte Kompilierungsoptionen ... klicken. Nun kann man als Ziel CPU x86 auswählen und wieder froh werden, denn plötzlich funktioniert wieder alles.
Posts mit dem Label Visual_Basic werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Visual_Basic werden angezeigt. Alle Posts anzeigen
Mittwoch, 25. September 2013
Mittwoch, 28. November 2012
Wie erstelle ich ein Custom Control mit Visual Studio in Visual Basic?
Ich habe es endlich geschafft und mein erstes eigenes Control erstellt.
Ich nutze dazu folgendes Tutorial http://www.codeproject.com/Articles/2016/Writing-your-Custom-Control-step-by-step?msg=4438543#xx4438543xx , welches allerdings in C# und auf Englisch ist.
Also dazu hier von mir ein kleines Tutorial in VB und deutsch:
Was wird draus?
Es soll ein zweifarbiger Button werden. Die Farben können in Ihrer Transparenz verändert werden. Es soll die Möglichkeit geben, das sich die Farben vertauschen, wenn man mit der Maus über den Button fährt.
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'Benutzerdefinierten Zeichnungscode hier einfügen
End Sub
End Class
Am Ende sieht es dann so aus:
Imports System.ComponentModel
Public Class cuteButton
Private Property m_color1 As Color = Color.LightGreen
Private Property m_color2 As Color = Color.DarkBlue
Private Property m_color1Transparent As Integer = 64
Private Property m_color2Transparent As Integer = 64
Private Property m_Gradient As Single
Private Property m_SwitchAtMouseOver As Boolean
Private Property m_Text As String
Private Property m_TextAlignment As ContentAlignment = ContentAlignment.MiddleCenter
<Description("Gets and sets CuteButtons textalignment.")> _
Public Property CuteTextAlignment() As ContentAlignment
Get
Return m_TextAlignment
End Get
Set(ByVal value As ContentAlignment)
m_TextAlignment = value
Invalidate()
End Set
End Property
<Description("Gets and sets CuteButtons text.")> _
Public Property CuteText() As String
Get
Return m_Text
End Get
Set(ByVal value As String)
m_Text = value
Invalidate()
End Set
End Property
<Description("Gets and sets if the CuteColors are switched when the Mouse is over the CuteButton.")> _
Public Property CuteMouseOver() As Boolean
Get
Return m_SwitchAtMouseOver
End Get
Set(ByVal value As Boolean)
m_SwitchAtMouseOver = value
Invalidate()
End Set
End Property
<Description("Gets and sets the first gradient color")> _
Public Property CuteColor1() As Color
Get
Return m_color1
End Get
Set(ByVal value As Color)
m_color1 = value
Invalidate()
End Set
End Property
<Description("Gets and sets the second gradient color")> _
Public Property CuteColor2() As Color
Get
Return m_color2
End Get
Set(ByVal value As Color)
m_color2 = value
Invalidate()
End Set
End Property
<Description("Gets and sets the transparency for the first gradient color (Vals between 0 and 255 allowed)")> _
Public Property CuteTransparent1() As Integer
Get
Return m_color1Transparent
End Get
Set(ByVal value As Integer)
m_color1Transparent = value
'Beschränkung der eingebbaren Werte, da es ohne zu Fehlern kommen kann
If m_color1Transparent > 255 Then
m_color1Transparent = 255
End If
If m_color1Transparent < 0 Then
m_color1Transparent = 0
End If
Invalidate()
End Set
End Property
<Description("Gets and sets the transparency for the second gradient color (Vals between 0 and 255 allowed)")> _
Public Property CuteTransparent2() As Integer
Get
Return m_color2Transparent
End Get
Set(ByVal value As Integer)
m_color2Transparent = value
If m_color2Transparent > 255 Then
m_color2Transparent = 255
End If
If m_color2Transparent < 0 Then
m_color2Transparent = 0
End If
Invalidate()
End Set
End Property
<Description("Gets and sets the angle for the gradient colors (Vals between 0 and 360 allowed)")> _
Public Property CuteGradient() As Single
Get
Return m_Gradient
End Get
Set(ByVal value As Single)
m_Gradient = value
If m_Gradient > 360 Then
m_Gradient = 360
End If
If m_Gradient < 0 Then
m_Gradient = 0
End If
Invalidate()
End Set
End Property
Private Sub XB_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter
Dim oldcolor As Color
If m_SwitchAtMouseOver = True Then
oldcolor = m_color1
m_color1 = m_color2
m_color2 = oldcolor
End If
End Sub
Private Sub XB_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
Dim oldcolor As Color
If m_SwitchAtMouseOver = True Then
oldcolor = m_color1
m_color1 = m_color2
m_color2 = oldcolor
End If
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
Dim c1, c2 As Color
Dim r As Rectangle
Dim style As New StringFormat()
'AusgangsStyle
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Center
'Style in Abhängigkeit des Eingstellten Properies CuteTextAlignment
Select Case m_TextAlignment
Case ContentAlignment.MiddleLeft
style.Alignment = StringAlignment.Near
style.LineAlignment = StringAlignment.Center
Case ContentAlignment.BottomLeft
style.Alignment = StringAlignment.Near
style.LineAlignment = StringAlignment.Far
Case ContentAlignment.TopLeft
style.Alignment = StringAlignment.Near
style.LineAlignment = StringAlignment.Near
Case ContentAlignment.BottomRight
style.Alignment = StringAlignment.Far
style.LineAlignment = StringAlignment.Far
Case ContentAlignment.MiddleRight
style.Alignment = StringAlignment.Far
style.LineAlignment = StringAlignment.Center
Case ContentAlignment.TopRight
style.Alignment = StringAlignment.Far
style.LineAlignment = StringAlignment.Near
Case ContentAlignment.BottomCenter
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Far
Case ContentAlignment.MiddleCenter
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Center
Case ContentAlignment.TopCenter
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Near
End Select
'Benutzerdefinierten Zeichnungscode hier einfügen
'Create two semi transparent colors
c1 = Color.FromArgb(m_color1Transparent, m_color1)
c2 = Color.FromArgb(m_color2Transparent, m_color2)
'Clientrectangel in r ablegen
r = Me.ClientRectangle
'Lineargradientbrush b in Form des Clientrechtecks mit den Farben c1 und c2 und dem Winkel m_Gradient
Dim b As New System.Drawing.Drawing2D.LinearGradientBrush(r, c1, c2, m_Gradient)
e.Graphics.FillRectangle(b, r)
'Hier wird noch einmal der CuteText ueber den Button gezeichnet, da der Original Button Text hinter dem Brush b verschwindet. Also wenn die Farben nicht transparent sind, ist der normale Button Text gar nicht lesbar. Style bestimmt die Position des CuteTextes.
e.Graphics.DrawString(m_Text, MyBase.Font, New SolidBrush(MyBase.ForeColor), r, style)
b.Dispose()
End Sub
End Class
Nun muss das Ganze noch über das Menü Erstellen, erstellt werden.
Die Zuweisung in die Toolbox dann über Rechtsklick in gewählter Unterkategorie -> Elemente auswählen -> unter .NET auf durchsuchen klicken -> hier nun die erstellte dll auswählen (unter bin/debug im Verzeichnis des Projektes) Sollte das Element in der Toolbox ausgegraut/nicht verfügbar sein, muss geprüft werden ob das Projekt in mindestens der gleichen Version (.Net Framework) ist, die auch zur Erstellung des Custom Controls verwendet worden ist. Einstellen lässt sich das über die Projekteingenschaften im Reiter Kompilieren. Hier muss der Dialog über den Button Erweiterte Kompilierungsoptionen aufgerufen werden,
Ich nutze dazu folgendes Tutorial http://www.codeproject.com/Articles/2016/Writing-your-Custom-Control-step-by-step?msg=4438543#xx4438543xx , welches allerdings in C# und auf Englisch ist.
Also dazu hier von mir ein kleines Tutorial in VB und deutsch:
Was wird draus?
Es soll ein zweifarbiger Button werden. Die Farben können in Ihrer Transparenz verändert werden. Es soll die Möglichkeit geben, das sich die Farben vertauschen, wenn man mit der Maus über den Button fährt.
- Das Projekt
Neues Projekt erstellen
Menü Datei -> Neues Projekt
Unter Visual Basic -> Windows -> und rechts Windows Forms Steuerelementbibliothek auswählen
Name vergeben , Speicherort festlegen -> OK
Im ProjektmappenExplorer UserControl1.vb markieren und mit Entf Taste löschen
Über das Menü Projekt -> Neues Element hinzufügen
Im Dialog nun das Benutzerdefinierte Steuerelement auswählen -> Namen vergeben, bei mir ist es CuteButton -> Hinzufügen
Im Projektmappenexplorer das Symbol für Alle Dateien anzeigen klicken
es sollte nun unter der CuteButton.vb noch die CuteButton.Designer.vb Datei erscheinen
Diese verändert man nun folgendermaßen:
Die Zeile (dritte von oben)
Inherits System.Windows.Forms.Control
wird nun abgeaendert in
Inherits System.Windows.Forms.Button - Der Code
Es wird jetzt nur noch die Datei CuteButton.vb verändert.
Am Anfang sieht sie so aus:
MyBase.OnPaint(e)
'Benutzerdefinierten Zeichnungscode hier einfügen
End Sub
End Class
Imports System.ComponentModel
Public Class cuteButton
Private Property m_color1 As Color = Color.LightGreen
Private Property m_color2 As Color = Color.DarkBlue
Private Property m_color1Transparent As Integer = 64
Private Property m_color2Transparent As Integer = 64
Private Property m_Gradient As Single
Private Property m_SwitchAtMouseOver As Boolean
Private Property m_Text As String
Private Property m_TextAlignment As ContentAlignment = ContentAlignment.MiddleCenter
<Description("Gets and sets CuteButtons textalignment.")> _
Public Property CuteTextAlignment() As ContentAlignment
Get
Return m_TextAlignment
End Get
Set(ByVal value As ContentAlignment)
m_TextAlignment = value
Invalidate()
End Set
End Property
<Description("Gets and sets CuteButtons text.")> _
Public Property CuteText() As String
Get
Return m_Text
End Get
Set(ByVal value As String)
m_Text = value
Invalidate()
End Set
End Property
<Description("Gets and sets if the CuteColors are switched when the Mouse is over the CuteButton.")> _
Public Property CuteMouseOver() As Boolean
Get
Return m_SwitchAtMouseOver
End Get
Set(ByVal value As Boolean)
m_SwitchAtMouseOver = value
Invalidate()
End Set
End Property
<Description("Gets and sets the first gradient color")> _
Public Property CuteColor1() As Color
Get
Return m_color1
End Get
Set(ByVal value As Color)
m_color1 = value
Invalidate()
End Set
End Property
<Description("Gets and sets the second gradient color")> _
Public Property CuteColor2() As Color
Get
Return m_color2
End Get
Set(ByVal value As Color)
m_color2 = value
Invalidate()
End Set
End Property
<Description("Gets and sets the transparency for the first gradient color (Vals between 0 and 255 allowed)")> _
Public Property CuteTransparent1() As Integer
Get
Return m_color1Transparent
End Get
Set(ByVal value As Integer)
m_color1Transparent = value
'Beschränkung der eingebbaren Werte, da es ohne zu Fehlern kommen kann
If m_color1Transparent > 255 Then
m_color1Transparent = 255
End If
If m_color1Transparent < 0 Then
m_color1Transparent = 0
End If
Invalidate()
End Set
End Property
<Description("Gets and sets the transparency for the second gradient color (Vals between 0 and 255 allowed)")> _
Public Property CuteTransparent2() As Integer
Get
Return m_color2Transparent
End Get
Set(ByVal value As Integer)
m_color2Transparent = value
If m_color2Transparent > 255 Then
m_color2Transparent = 255
End If
If m_color2Transparent < 0 Then
m_color2Transparent = 0
End If
Invalidate()
End Set
End Property
<Description("Gets and sets the angle for the gradient colors (Vals between 0 and 360 allowed)")> _
Public Property CuteGradient() As Single
Get
Return m_Gradient
End Get
Set(ByVal value As Single)
m_Gradient = value
If m_Gradient > 360 Then
m_Gradient = 360
End If
If m_Gradient < 0 Then
m_Gradient = 0
End If
Invalidate()
End Set
End Property
Private Sub XB_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter
Dim oldcolor As Color
If m_SwitchAtMouseOver = True Then
oldcolor = m_color1
m_color1 = m_color2
m_color2 = oldcolor
End If
End Sub
Private Sub XB_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
Dim oldcolor As Color
If m_SwitchAtMouseOver = True Then
oldcolor = m_color1
m_color1 = m_color2
m_color2 = oldcolor
End If
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
Dim c1, c2 As Color
Dim r As Rectangle
Dim style As New StringFormat()
'AusgangsStyle
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Center
'Style in Abhängigkeit des Eingstellten Properies CuteTextAlignment
Select Case m_TextAlignment
Case ContentAlignment.MiddleLeft
style.Alignment = StringAlignment.Near
style.LineAlignment = StringAlignment.Center
Case ContentAlignment.BottomLeft
style.Alignment = StringAlignment.Near
style.LineAlignment = StringAlignment.Far
Case ContentAlignment.TopLeft
style.Alignment = StringAlignment.Near
style.LineAlignment = StringAlignment.Near
Case ContentAlignment.BottomRight
style.Alignment = StringAlignment.Far
style.LineAlignment = StringAlignment.Far
Case ContentAlignment.MiddleRight
style.Alignment = StringAlignment.Far
style.LineAlignment = StringAlignment.Center
Case ContentAlignment.TopRight
style.Alignment = StringAlignment.Far
style.LineAlignment = StringAlignment.Near
Case ContentAlignment.BottomCenter
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Far
Case ContentAlignment.MiddleCenter
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Center
Case ContentAlignment.TopCenter
style.Alignment = StringAlignment.Center
style.LineAlignment = StringAlignment.Near
End Select
'Benutzerdefinierten Zeichnungscode hier einfügen
'Create two semi transparent colors
c1 = Color.FromArgb(m_color1Transparent, m_color1)
c2 = Color.FromArgb(m_color2Transparent, m_color2)
'Clientrectangel in r ablegen
r = Me.ClientRectangle
'Lineargradientbrush b in Form des Clientrechtecks mit den Farben c1 und c2 und dem Winkel m_Gradient
Dim b As New System.Drawing.Drawing2D.LinearGradientBrush(r, c1, c2, m_Gradient)
e.Graphics.FillRectangle(b, r)
'Hier wird noch einmal der CuteText ueber den Button gezeichnet, da der Original Button Text hinter dem Brush b verschwindet. Also wenn die Farben nicht transparent sind, ist der normale Button Text gar nicht lesbar. Style bestimmt die Position des CuteTextes.
e.Graphics.DrawString(m_Text, MyBase.Font, New SolidBrush(MyBase.ForeColor), r, style)
b.Dispose()
End Sub
End Class
Nun muss das Ganze noch über das Menü Erstellen, erstellt werden.
Die Zuweisung in die Toolbox dann über Rechtsklick in gewählter Unterkategorie -> Elemente auswählen -> unter .NET auf durchsuchen klicken -> hier nun die erstellte dll auswählen (unter bin/debug im Verzeichnis des Projektes) Sollte das Element in der Toolbox ausgegraut/nicht verfügbar sein, muss geprüft werden ob das Projekt in mindestens der gleichen Version (.Net Framework) ist, die auch zur Erstellung des Custom Controls verwendet worden ist. Einstellen lässt sich das über die Projekteingenschaften im Reiter Kompilieren. Hier muss der Dialog über den Button Erweiterte Kompilierungsoptionen aufgerufen werden,
Montag, 26. November 2012
kleines Tool zum Umwandeln von Text in Großbuchstaben
Da meine Tochter vorerst nur Großbuchstaben gelernt hat und immer wieder mal ein wenig lesen üben möchte, habe ich mal ein kleines Tool zum Umwandeln von Text in Text mit Großbuchstaben erstellt.
Hier ist der Downloadlink -> Link
Das Programm wird gern von Antivirensoftware als verdächtig eingestuft, ist aber virenfrei.
Die Installation verlangt .Net 4 -> wird ggf. mit installiert (dauert dann etwas länger). Das Tool ist nur für Windows (ab XP).
Installation:
Entpacken. Passwort ist UCaseText.
Setup.exe ausführen.
Anwendung:
In linkes Textfeld Text reinkleben, Knopf (->) in der Mitte drücken und auf der rechten Seite erscheint der Text in Großbuchstaben. Wer möchte kann es sich von dort herauskopieren in Word oder ähnliches und es dann ausdrucken.
Hier ist der Downloadlink -> Link
Das Programm wird gern von Antivirensoftware als verdächtig eingestuft, ist aber virenfrei.
Die Installation verlangt .Net 4 -> wird ggf. mit installiert (dauert dann etwas länger). Das Tool ist nur für Windows (ab XP).
Installation:
Entpacken. Passwort ist UCaseText.
Setup.exe ausführen.
Anwendung:
In linkes Textfeld Text reinkleben, Knopf (->) in der Mitte drücken und auf der rechten Seite erscheint der Text in Großbuchstaben. Wer möchte kann es sich von dort herauskopieren in Word oder ähnliches und es dann ausdrucken.
Donnerstag, 27. September 2012
An error occurred creating the form. See Exception.InnerException for details.
Visual Basic / Studio Error when starting Debug (F5)
System.InvalidOperationException
An error occurred creating the form. See Exception.InnerException for details. The error is: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
Parametername: index"}
I had created several checkboxes and the checkstate was set to true. then i made the following Sub:
Sub checkCHBSeries()
when starting the application, it was recognized that checked is true and tried to set the charts series to enabled. but the chart was not yet initialized so it couldnt enable the series.
in the forms designer.vb code the initialization of the chart_dev is behind/below the checkboxes initialization part
Exception said: See Exception.InnerException for details So i choosed to see the details: Opened the Tree -> InnerException and pulled down the stacktrace -> that told me the line and the file where to look for the thing. And i got the clou.
- Found out the reason:
I had created several checkboxes and the checkstate was set to true. then i made the following Sub:
Sub checkCHBSeries()
If chb_alba.Checked = True Then Chart_dev.Series(0).Enabled = True Else Chart_dev.Series(0).Enabled = False
If chb_eagle.Checked = True Then Chart_dev.Series(1).Enabled = True Else Chart_dev.Series(1).Enabled = False
If chb_birdie.Checked = True Then Chart_dev.Series(2).Enabled = True Else Chart_dev.Series(2).Enabled = False
If chb_par.Checked = True Then Chart_dev.Series(3).Enabled = True Else Chart_dev.Series(3).Enabled = False
If chb_bogey.Checked = True Then Chart_dev.Series(4).Enabled = True Else Chart_dev.Series(4).Enabled = False
If chb_dbogey.Checked = True Then Chart_dev.Series(5).Enabled = True Else Chart_dev.Series(5).Enabled = False
If chb_tbogey.Checked = True Then Chart_dev.Series(6).Enabled = True Else Chart_dev.Series(6).Enabled = False
If chb_worse.Checked = True Then Chart_dev.Series(7).Enabled = True Else Chart_dev.Series(7).Enabled = False
End Sub
when starting the application, it was recognized that checked is true and tried to set the charts series to enabled. but the chart was not yet initialized so it couldnt enable the series.
in the forms designer.vb code the initialization of the chart_dev is behind/below the checkboxes initialization part
- how did i find it out:
Exception said: See Exception.InnerException for details So i choosed to see the details: Opened the Tree -> InnerException and pulled down the stacktrace -> that told me the line and the file where to look for the thing. And i got the clou.
- So there seemed to be at least three ways to fix that:
- put the initialization of the chart above the ones of the checkboxes -> tried that, it worked
- turn off the checked state (set it to false) at design time -> worked too
- catch the exception in the above mentioned sub -> would surely be the best way (didnt try) :)
Montag, 14. Mai 2012
Visual Basic Error / Fehler: Die angegebene Zelle gehört bereits zu einem Raster. Cell provided already belongs to a grid.
Visual Studio Visual Basic Fehler beim aufbau datagrid: Die angegebene Zelle gehört bereits zu einem Raster:
Ich versuchte einer Zelle im Datagrid den Typ Combobox zuzuweisen
dazu
for i = 1 to 19
me.grid_Scoreinput(i,8)=fairwaycell
next i
spaeter in der For Schleife sollte nun in jeder Spalte in einer bestimmten Zeile der Zelltyp auf fairwaycell gesetzt werden.
dies funktionierte aber nur beim ersten Schleifendurchlauf, dann kam immer der genannte Fehler
Abhilfe schaffte hier:
Deklarierung in der For schleife
Ich versuchte einer Zelle im Datagrid den Typ Combobox zuzuweisen
dazu
Sub xyz
dim fairwaycell as new datagridviewcomboboxcell
fairwaycell.items.addrange("","Hit", "Miss", "Left", "Right")
for i = 1 to 19
me.grid_Scoreinput(i,8)=fairwaycell
next i
...
end sub
spaeter in der For Schleife sollte nun in jeder Spalte in einer bestimmten Zeile der Zelltyp auf fairwaycell gesetzt werden.
dies funktionierte aber nur beim ersten Schleifendurchlauf, dann kam immer der genannte Fehler
Abhilfe schaffte hier:
Deklarierung in der For schleife
for i = 1 to 19
dim fairwaycell as new datagridviewcomboboxcell
fairwaycell.items.addrange("","Hit", "Miss", "Left", "Right")
me.grid_Scoreinput(i,8)=fairwaycell
next i
Abonnieren
Posts (Atom)