Klasse aus Windows Forms Projekt als DLL einzeln erstellen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Matix Media.

    @xChRoNiKx & @'Nolde' ich weiß wie man eine DLL als einzeldes Projekt erstellt, das Problem ist das diese Klasse auf Windows Forms Komponente zugreift und wenn ich diese in einer eilzel-Projekt-Klasse erstelle zeigt er es als Fehler an.
    Wenn es eine Möglichkeit geben würde diese zu Importieren wär das natürlich cool.

    code:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System
    3. Imports System.Windows.Forms
    4. Imports System.Drawing
    5. Public Class WaterMarkTextBox
    6. Inherits TextBox
    7. Private oldFont As Font = Nothing
    8. Private waterMarkTextEnabled As Boolean = False
    9. #Region "Attributes"
    10. Private _waterMarkColor As Color = Drawing.Color.Gray
    11. Public Property WaterMarkColor() As Color
    12. Get
    13. Return _waterMarkColor
    14. End Get
    15. Set(ByVal value As Color)
    16. _waterMarkColor = value
    17. Me.Invalidate()
    18. End Set
    19. End Property
    20. Private _waterMarkText As String = "Water Mark"
    21. Public Property WaterMarkText() As String
    22. Get
    23. Return _waterMarkText
    24. End Get
    25. Set(ByVal value As String)
    26. _waterMarkText = value
    27. Me.Invalidate()
    28. End Set
    29. End Property
    30. #End Region
    31. ' Default constructor
    32. Public Sub New()
    33. JoinEvents(True)
    34. End Sub
    35. Private Sub JoinEvents(ByVal join As Boolean)
    36. If join Then
    37. AddHandler(TextChanged), AddressOf WaterMark_Toggle
    38. AddHandler(LostFocus), AddressOf WaterMark_Toggle
    39. AddHandler(FontChanged), AddressOf WaterMark_FontChanged
    40. 'No one of the above events will start immeddiatlly
    41. 'TextBox control still in constructing, so,
    42. 'Font object (for example) couldn't be catched from within WaterMark_Toggle
    43. 'So, call WaterMark_Toggel through OnCreateControl after TextBox is totally created
    44. 'No doupt, it will be only one time call
    45. 'Old solution uses Timer.Tick event to check Create property
    46. End If
    47. End Sub
    48. Private Sub WaterMark_Toggle(ByVal sender As Object, ByVal args As EventArgs)
    49. If Me.Text.Length <= 0 Then
    50. EnableWaterMark()
    51. Else
    52. DisableWaterMark()
    53. End If
    54. End Sub
    55. Private Sub WaterMark_FontChanged(ByVal sender As Object, ByVal args As EventArgs)
    56. If waterMarkTextEnabled Then
    57. oldFont = New Font(Font.FontFamily, Font.Size, Font.Style, Font.Unit)
    58. Refresh()
    59. End If
    60. End Sub
    61. Private Sub EnableWaterMark()
    62. 'Save current font until returning the UserPaint style to false (NOTE: It is a try and error advice)
    63. oldFont = New Font(Font.FontFamily, Font.Size, Font.Style, Font.Unit)
    64. 'Enable OnPaint Event Handler
    65. Me.SetStyle(ControlStyles.UserPaint, True)
    66. Me.waterMarkTextEnabled = True
    67. 'Trigger OnPaint immediatly
    68. Refresh()
    69. End Sub
    70. Private Sub DisableWaterMark()
    71. 'Disbale OnPaint event handler
    72. Me.waterMarkTextEnabled = False
    73. Me.SetStyle(ControlStyles.UserPaint, False)
    74. 'Return oldFont if existed
    75. If Not oldFont Is Nothing Then
    76. Me.Font = New Font(Font.FontFamily, Font.Size, Font.Style, Font.Unit)
    77. End If
    78. End Sub
    79. ' Override OnCreateControl
    80. Protected Overrides Sub OnCreateControl()
    81. MyBase.OnCreateControl()
    82. WaterMark_Toggle(Nothing, Nothing)
    83. End Sub
    84. ' Override OnPaint
    85. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    86. ' Use the same font that was defined in base class
    87. Dim drawFont As Font = New Font(Font.FontFamily, Font.Size, Font.Style, Font.Unit)
    88. ' Create new brush with gray color or
    89. Dim drawBrush As SolidBrush = New SolidBrush(Me.WaterMarkColor) 'use WaterMarkColor
    90. ' Draw Test or WaterMark
    91. e.Graphics.DrawString(IIf(waterMarkTextEnabled, WaterMarkText, Text).ToString(), drawFont, drawBrush, New Point(0, 0))
    92. MyBase.OnPaint(e)
    93. End Sub
    94. End Class​
    Grüße, Matix
    Dann setze halt den nötigen Verweis.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Für System.Windows.Forms, natürlich System.Windows.Forms.

    Doppelklick im Projektmappenexplorer auf "MyProject", Verweise auswählen, verweiss hinzufügen wählen und TADA:
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin