IDE meldet "Button nicht deklariert", obwohl Button vorhanden

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    IDE meldet "Button nicht deklariert", obwohl Button vorhanden

    Hallo ihr lieben.
    Ich habe hier einen soweit fertigen Taschenrechner, für den ich nun noch einen "Darkmode" programmieren möchte, um das ganze Ding schwarz zu färben.
    Mit der Form selbst und der Textbox "TBHistory", klappt alles wunderbar:

    VB.NET-Quellcode

    1. Private Sub ChangeMode(darkmode As Boolean)
    2. Dim Formcolour As System.Drawing.Color = Color.Black
    3. Dim Numbercolour As System.Drawing.Color = Color.Black
    4. Me.BackColor = Formcolour
    5. TBHistory.BackColor = Formcolour
    6. btn0.Backcolor = Numbercolour
    7. End Sub

    Aber an der Stelle btn0.backcolor = Numbercolour gibt mir die IDE den Fehler "btn0 wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich."
    Der Button ist aber genau mit diesem Namen vorhanden. Egal welchen anderen (existierenden) Button ich versuche, das Resultat ist immer das gleiche.
    Auch gibt mit die IDE beim Eintippen der Buttonnamen immer nur die dazugehörigen Click Events als autovervollständigung, aber nicht den Button selbst.
    Woran könnte dies liegen?
    Ist der Button „btn0“ auf der Form, aus der auch die Methode ChangeMode() aufgerufen wird?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Genau. Entweder Du packst die Sub dahin, wo der Button ist, oder Du übergibst den Button als Parameter, dann ist es egal, wo die Sub ist.
    btw: Den Parameter darkmode verwendest Du in der Sub gar nicht.

    ##########

    Poste ggf. mal bitte über [+ Erweiterte Antwort] nen Screenshot Deines Form-Designers, auf dem zu sehen ist: Der Button die TBHistory-TextBox, btn0, das Eigenschaftenfenster von btn0.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Huhu
    Danke euch beiden für die Ideen.
    Leider hat mein Programm nur eine einzige Form namens FrmTaschenrechner.
    Sämtlicher Code steht innerhalb der Class FrmTaschenrechner.

    Gerade habe ich ein Testprogramm gemacht mit zwei Buttons (Button1 und Button2).
    Die Button1_Click Sub soll Button2 färben.
    Innerhalb des Codes schlägt mit die Autovervollständigung den Button2 vor. Der Code tut was er soll.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Button2.BackColor = Color.Black
    3. End Sub


    Der Button der nicht gefunden wird, liegt innerhalb mehrer Container, aber das gilt für TBHistory genauso. Deswegen schließe ich das mal aus.
    Auch habe ich den Button gelöscht und mit gleichem Namen wieder angelegt. Ändert auch nix.

    Kann das ganze vielleicht an irgendeiner Einstellung in Visual Studio 2019 liegen?
    Denn mir werden zum Beispiel neuerdings auch Klick Events im Designer angelegt und nicht mehr in der Form selbst als "Button1_Click(Argumente) handles Button1_Click
    Dieses handels Click steht nun im Designer.

    Bild der Dokumentengliederung habe ich angehängt. Sind zwei Bilder - passt nicht auf eins. Zuviele Container xD


    Ps: Zum Parameter Darkmode:
    Mithilfe des Parameters möchte ich wenn die Sub fertig ist, die Variablen mit Farben befüllen, um zwischen hellem Modus und dunklen Modus mit gleichem Code zu wechseln.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub Modewechsel(darkmode as boolean)
    2. Dim Farbe1 As System.Drawing.Color = Color.Black
    3. Dim Farbe2 As System.Drawing.Color = Color.Black
    4. If not darkmode then
    5. Farbe1 = "entsprechende helle Farbe"
    6. Farbe2 = "entsprechende helle Farbe"
    7. End if
    8. ' und hier dann der Code um die Controls einzufärben.
    Bilder
    • 1.png

      90,52 kB, 1.543×741, 154 mal angesehen
    • 2.png

      13,18 kB, 464×246, 130 mal angesehen
    @DerSmurf Bereinige Dein Projekt (kein bin- und kein obj-Verzeichnis) und hänge es als ZIP an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Huhu.
    Ich wollte gerade alles aus dem Code löschen, was nichts mit der Button Problematik zu tun hat und nUpdate und Installer und Hilfe raus.
    Irgendwie hab ichs im falschen Projekt gelöscht und nu is mein Code weg :(
    Leider habe ich nur eine 2 Tage alte Sicherung (ich sollte da echt mal akribischer werden)
    Also code ich meinen Taschenrechner heute Abend erstmal wieder auf aktuellen Stand und lade dann die abgespeckte Version hoch.

    Edit: WAS IST DENN DAS FÜR EIN MIST -.-
    Ich kopiere mein Projekt auf den Desktop und mache Änderungen.
    Nach dem Speichern sind diese Änderungen IN BEIDEN PROJEKTEN vorhanden -.-
    @DerSmurf Hast Du noch eine EXE davon?
    Da lässt sich ggf. was machen mit dem IlSpy.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Soho.
    Ich habs wieder hergestellt. War Gottseidank nichts ernstes.
    Habe die Buttons ein wenig anders gefärbt, einen Installer erstellt, nUpdate integriert und eine chm Hilfe erstellt.
    Das habe ich gerade wieder eingepflegt. Lediglich die zur Hilfe gehörenden html Dateien sind weg - aber die Hilfe habe ich eh nur gemacht, damit ichs mal gemacht hab - braucht ja keiner.

    Und ich fühle mich furchtbar verarscht.
    Wenn ich mein Projekt auf den Desktop kopiere ist es scheinbar IMMER so, dass sowohl die Kopie, als auch das Original verändert werden. Ich weiß nicht, was der Mist soll, aber naja.
    Zurück zum Thema:

    Das Projekt habe ich ohne alles was nicht benötigt wird angehängt.
    Lediglich die Click Events habe ich drin gelassen und hier nur den Code gelöscht. Sonst hätte ich manuell im Designer alle Handler löschen müssen.

    Hierzu noch eine andere Frage:
    Das die Eventhandler im Designer sind ist erst seid Visual Studio 2019 so. Vorher waren sie ja direkt im Code.
    Sind die Events im Designer besser aufgehoben? Wenn nicht, gibt es eine Einstellung, dass ich die Handler wieder im Code habe?
    Dateien
    Was'n das? Hast Du die frmTaschenrechner.Designer.VB beschrieben? Da steht ja drinne:

    VB.NET-Quellcode

    1. Private Sub InitializeComponent()
    2. Dim BTN0 As System.Windows.Forms.Button

    Normalerweise müsste am Ende der partial-Klassendefinition stehen: Friend WithEvents BTN0 As Button
    und dann weiter oben

    VB.NET-Quellcode

    1. Private Sub InitializeComponent()
    2. Me.BTN0 = New System.Windows.Forms.Button()

    Kein Wunder, warum da IntelliSense verschnupft reagiert.
    Was hast Du gemacht, um das so zu erstellen?

    Und wenn ich BTN0 aus dem Designer rauslösche, dann nen neuen Button dort reinsetze und den entsprechend umbenenne, wird die Designer.VB auch so erstellt wie es sein sollte - zumindest für BTN0.

    ##########

    @DerSmurf: Hab was: Bei allen Buttons ist die Property GenerateMembers auf False. Wenn man die auf True stellt, funktioniert alles wieder normal - zumindest mit der EventHandler-Erstellung. Hast Du das mit GenerateMembers geändert? (Klar, dumme Frage, wer sonst?) Aber warum?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hmm.
    In den Designer hab ich nix geschrieben.
    Es ist ne weile her, dass ich das Design gemacht hab.
    Ich weiß ich habe einen Button erstellt, die Formate hierfür gesetzt und diesen Button dann immer nur kopiert.
    Wahrscheinlich habe ich beim erstellen versehentlich doppelt auf die GenerateMember Eigenschaft geklickt, keine Ahnung, und mir das dann immer falsch weiter kopiert.
    Ich habe gerade mal die MSDN bemüht, wofür diese Eigenschaft gut ist.
    Ich habe es so verstanden, dass es letztlich wie bei einer Private, bzw. Public Variable oder Sub ist. Aber wo ist der Sinn dafür bei einem Control?

    Ich habe diese Eigenschaft jetzt für alle Buttons auf True gesetzt. Nun sind auch die Click Handler wieder im Code sichtbar :o)

    Hier der Code aus meinem Designer. Ich nehme an so soll das, und ich komme ums löschen und neu erstellen der Buttons drumherum?

    VB.NET-Quellcode

    1. Partial Class frmTaschenrechner
    2. Inherits System.Windows.Forms.Form
    3. 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
    4. <System.Diagnostics.DebuggerNonUserCode()> _
    5. Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    6. Try
    7. If disposing AndAlso components IsNot Nothing Then
    8. components.Dispose()
    9. End If
    10. Finally
    11. MyBase.Dispose(disposing)
    12. End Try
    13. End Sub
    14. 'Wird vom Windows Form-Designer benötigt.
    15. Private components As System.ComponentModel.IContainer
    16. 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
    17. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
    18. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
    19. <System.Diagnostics.DebuggerStepThrough()> _
    20. Private Sub InitializeComponent()
    21. Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTaschenrechner))
    22. Me.BTN0 = New System.Windows.Forms.Button()
    23. Me.BTN1 = New System.Windows.Forms.Button()
    24. Me.BTN2 = New System.Windows.Forms.Button()
    25. Me.BTN3 = New System.Windows.Forms.Button()
    26. Me.BTN4 = New System.Windows.Forms.Button()
    27. Me.BTN5 = New System.Windows.Forms.Button()
    28. Me.BTN6 = New System.Windows.Forms.Button()
    29. Me.BTN7 = New System.Windows.Forms.Button()
    30. Me.BTN8 = New System.Windows.Forms.Button()
    31. Me.BTN9 = New System.Windows.Forms.Button()
    32. '''''''''''''''''''''''''''''''''''''''''''''''''''''''UND ALLE WEITEREN Controls
    33. CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).BeginInit()
    34. Me.SplitContainer1.Panel1.SuspendLayout()
    35. Me.SplitContainer1.Panel2.SuspendLayout()
    36. Me.SplitContainer1.SuspendLayout()
    37. CType(Me.SplitContainer2, System.ComponentModel.ISupportInitialize).BeginInit()
    38. Me.SplitContainer2.Panel1.SuspendLayout()
    39. Me.SplitContainer2.Panel2.SuspendLayout()
    40. Me.SplitContainer2.SuspendLayout()
    41. Me.TLPLabels.SuspendLayout()
    42. Me.TLPButtons.SuspendLayout()
    43. Me.GRPMenu.SuspendLayout()
    44. Me.TLPMenu.SuspendLayout()
    45. Me.TLPHistory.SuspendLayout()
    46. Me.TableLayoutPanel1.SuspendLayout()
    47. Me.SuspendLayout()
    48. '
    49. 'BTN0
    50. '
    51. Me.BTN0.BackColor = System.Drawing.Color.Silver
    52. Me.BTN0.Dock = System.Windows.Forms.DockStyle.Fill
    53. Me.BTN0.FlatStyle = System.Windows.Forms.FlatStyle.Popup
    54. Me.BTN0.Font = New System.Drawing.Font("Microsoft Sans Serif", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    55. Me.BTN0.Location = New System.Drawing.Point(129, 387)
    56. Me.BTN0.Name = "BTN0"
    57. Me.BTN0.Size = New System.Drawing.Size(100, 85)
    58. Me.BTN0.TabIndex = 0
    59. Me.BTN0.Text = "0"
    60. Me.BTN0.UseVisualStyleBackColor = False
    61. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''UND ALLE WEITEREN CONTROLS
    62. End Sub
    63. Friend WithEvents SplitContainer1 As SplitContainer
    64. Friend WithEvents SplitContainer2 As SplitContainer
    65. Friend WithEvents TLPLabels As TableLayoutPanel
    66. Friend WithEvents lblHistory As Label
    67. Friend WithEvents LBLInput As Label
    68. Friend WithEvents TLPButtons As TableLayoutPanel
    69. Friend WithEvents TLPHistory As TableLayoutPanel
    70. Friend WithEvents TBHistory As TextBox
    71. Friend WithEvents TableLayoutPanel1 As TableLayoutPanel
    72. Friend WithEvents GRPMenu As GroupBox
    73. Friend WithEvents TLPMenu As TableLayoutPanel
    74. Friend WithEvents BTN0 As Button
    75. Friend WithEvents BTN1 As Button
    76. Friend WithEvents BTN2 As Button
    77. Friend WithEvents BTN3 As Button
    78. Friend WithEvents BTN4 As Button
    79. Friend WithEvents BTN5 As Button
    80. Friend WithEvents BTN6 As Button
    81. Friend WithEvents BTN7 As Button
    82. Friend WithEvents BTN8 As Button
    83. Friend WithEvents BTN9 As Button
    84. Friend WithEvents BTNDivision As Button
    85. Friend WithEvents BTNMultiplication As Button
    86. Friend WithEvents BTNSubstraktion As Button
    87. Friend WithEvents BTNAddition As Button
    88. Friend WithEvents BTNResult As Button
    89. Friend WithEvents BTNClearAll As Button
    90. Friend WithEvents BTNDel As Button
    91. Friend WithEvents BTNPercent As Button
    92. Friend WithEvents BTNComma As Button
    93. Friend WithEvents BTNFullMarkup19 As Button
    94. Friend WithEvents BTNMarkup19 As Button
    95. Friend WithEvents BTNFullMarkup7 As Button
    96. Friend WithEvents BTNMarkup7 As Button
    97. Friend WithEvents BTNNet19 As Button
    98. Friend WithEvents BTNNet7 As Button
    99. Friend WithEvents BTNHistory As Button
    100. Friend WithEvents BTNMenu As Button
    101. Friend WithEvents BTNUpdate As Button
    102. Friend WithEvents BTNCloseMenu As Button
    103. Friend WithEvents BTNHelp As Button
    104. End Class
    Jau! So muss es aussehen!
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @DerSmurf Da hast Du ggf. den Button falsch umbenannt oder so, manchmal hab ich da auch Probleme.
    GUI-Elemente werden im Designer umbenannt, nicht im Code.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!