vb6 wikipedia - Stoppen Sie, dass Visual Basic 6 mein Gehäuse ändert




vb5 aktuelle (8)

Beeindruckend. Ich habe viel Zeit mit dem Programmieren in VB6 verbracht und habe keine Ahnung, worum es geht. Das Einzige, woran ich denken kann, ist, dass Intellisense die Großschreibung von Variablennamen so ändert, dass sie mit ihren Deklarationen übereinstimmen. Wenn Sie sich darüber beschweren, müsste ich mich fragen, warum sie zum ersten Mal auf andere Weise betreten wurden. Und wenn dies Ihr Problem ist, nein, es gibt keine Möglichkeit, es zu deaktivieren, die mir bekannt ist. Ich schlage vor, dass Sie auf einmal alle Dateien auschecken, sich vergewissern, dass die Obergrenzen der Deklarationen und der Verwendung von Variablen übereinstimmen und wieder einchecken.

Eine sehr einfache Frage, die anscheinend nicht in der Lage ist, eine anständige Antwort zu finden: Wie kann ich Visual Basic 6 dazu bringen, mein ^ @ # * ing-Variablengehäuse nicht mehr zu ändern?!

Ich weiß, dass die allgemeine Meinung vieler VB-Benutzer ist, dass dieses "Feature" eigentlich sehr hilfreich ist, aber ich bezweifle, dass sie es mit jedem Quellcodeverwaltungssystem verwenden. Dies ist absolut UNFREUNDLICH, wenn Sie versuchen, mit mehreren anderen Entwicklern an einem Projekt von erheblicher Größe zusammenzuarbeiten. Wenn Sie dies ignorieren, führen Sie Tausende von falsch-positiven "Änderungen" an Ihren Dateien durch (sogar solche, die keine tatsächlichen Codeänderungen enthalten!), Die den Revisionsverlauf verschmutzen und es in manchen Fällen nahezu unmöglich machen, die tatsächlich vorgenommenen Änderungen zu lokalisieren.

Wenn Sie es nicht ignorieren (wie in meinem Büro, wo wir gezwungen waren, eine Richtlinie "keine Änderung unnötiger Fälle" zu implementieren), verbringen Sie das 5-Fache der Zeit, die Sie normalerweise für jedes Commit verwenden würden, da Sie die Korrekturen von VB sorgfältig zurücknehmen müssen "In jeder Datei werden manchmal Hunderte von Zeilen zurückgesetzt, um eine Änderung in einer Zeile vorzunehmen.

Sicherlich muss es eine Einstellung, ein Plugin, einen Hack usw. geben, die dieses unerwünschte "Feature" entfernen kann? Ich bin bereit, jede Methode zu ergreifen, die ich bekommen kann, solange ich nicht durch mehrere Phantomdifferenzen gehen muss. Und um ein paar Beschwerden vorwegzunehmen: Nein, ich kann die Fallerkennung in meinem Vergleichstool nicht ausschalten, das ist nicht der Punkt. Nein, wir können nicht nur die Falländerungen global vornehmen. Wir arbeiten mit Hunderttausenden von LOC zusammen, an denen mehrere Entwickler mit langjähriger Entwicklungsarbeit arbeiten. Eine Synchronisierung ist aus betriebswirtschaftlicher Sicht nicht möglich. Und zum Schluss: Nein, wir können nicht auf VB.net upgraden oder auf eine andere Sprache portieren (so viel ich gerne würde).

(Und ja, ich bin im Moment nur ein bisschen verärgert. Kannst du das sagen? Ich entschuldige mich, aber das kostet mich Zeit und mein Firmengeld, und ich finde das nicht akzeptabel.)


SIMPLE WAY: Dim jede Variable in dem von Ihnen gewünschten Fall. Andernfalls ändert VBA es auf eine nicht verständliche Weise.

Dim x, X1, X2, y, Yy  as variant

In einer Subroutine werden ALLE Fälle in die Dim Anweisung geändert


Speziell für die Steuerung der Enummenwerte gibt es ein VB6-IDE-Add-In, das hilfreich sein kann. Enums scheinen eine etwas eindeutige Version dieses Problems zu haben.

Wie im Link unten beschrieben:

Die VB6 IDE hat eine ärgerliche Eigenart, wenn es um Enum-Mitglieder geht. Im Gegensatz zu anderen Bezeichnern erzwingt die IDE den Fall eines Enum-Mitglieds nicht, da dies im Enum-Block angegeben wurde. Dies führt gelegentlich dazu, dass ein manuell geschriebenes Enum-Mitglied seinen ursprünglichen Fall verliert, es sei denn, ein Codierer hat es sorgfältig genug eingegeben. ...

Wenn jedoch ein Projekt viele Enums enthält und / oder ein bestimmtes Enum viele Mitglieder hat, kann das erneute Deklarieren der Mitglieder in jedem von ihnen sehr schnell langweilig werden. ...

Ref: http://www.vbforums.com/showthread.php?778109-VB6-modLockEnumCase-bas-Enforce-Case-of-Enums

... laden und entladen Sie das Add-In nach Bedarf über das Dialogfeld Add-In-Manager. Die Verwendung ist so einfach, dass Sie den gesamten Enum-Block auswählen, mit der rechten Maustaste klicken und dann das Kontextmenüelement "Enum-Fall sperren" auswählen.


Abhängig von Ihrer Situation hinzufügen

#If False Then
    Dim CorrectCase
#End If

könnte helfen.


Ich glaube nicht, dass es jemanden gibt, der es tut. Die IDE ändert die Groß- und Kleinschreibung des Variablennamens bei der Deklaration. Aber ich habe ehrlich gesagt an dem Tag an mehreren großen VB6-Projekten gearbeitet, und das war nie ein Problem. Warum ändern die Leute in Ihrem Entwicklungsteam ständig variable Deklarationen? Es scheint, dass Sie keine eindeutige Benennungsrichtlinie für Variablen festgelegt haben, die Sie durchsetzen. Ich kenne Ihre Verärgerung, also keine Beleidigung, aber in dieser Hinsicht fehlen möglicherweise Ihre Richtlinien.

Laut diesem SO-Thread sind alternative VB6-IDEs leider schwer zu bekommen. Daher ist es am besten, dieses Problem über Richtlinien zu lösen. Oder wechseln Sie zu VB.NET. :)


Hier ist ein reales Szenario und wie wir es für unser 350k LOC VB6-Projekt gelöst haben.

Wir verwenden Janus Grid und irgendwann haben alle Codezeilen, auf die die DefaultValue-Eigenschaft von JSColumn verwiesen wurde, auf defaultValue umgestellt. Dies war eine Gelegenheit, das gesamte IDE-Ärgernis zu debuggen.

Was ich gefunden habe, war, dass gerade ein Verweis auf MSXML hinzugefügt wurde und nun die IDE die Eigenschaft defaultValue von ISchemaAttributes vor der Janus-Grid-Typelib abruft.

Nach einigen Experimenten fand ich heraus, dass die IDE "registrierte" Bezeichner in der folgenden Reihenfolge sammelt:

  • Referenzierte Bibliotheken / Projekte aus Projekt-> Referenzen in der Reihenfolge, in der sie aufgelistet sind

  • Steuerelemente aus Projekt-> Komponenten (in unbekannter Reihenfolge)

  • Quellcode

Daher haben wir einfach eine Dummy-Klasse / -Interface mit Methoden erstellt, die unser eigenes Gehäuse enthalten. Da wir bereits eine projektweite Typelib hatten, auf die wir vor jedem anderen Typ aus jedem Projekt verwiesen haben, war dies schmerzlos.

Hier ist ein Teil der IDL für unsere IUcsVbIntellisenseFix-Schnittstelle:

[
  odl,
  uuid(<<guid_here>>),
  version(1.0),
  dual,
  nonextensible,
  oleautomation
]
interface IUcsVbIntellisenseFix : IDispatch {
    [id(1)] HRESULT DefaultValue();
    [id(2)] HRESULT Selector();
    [id(3)] HRESULT Standalone();
    ...
}

Wir haben eine Reihe von Methoden zu IUcsVbIntellisenseFix hinzugefügt, von denen einige nach enum-Elementen benannt wurden, die wir falsch geschrieben haben, und was auch immer wir korrigieren wollten. Dasselbe kann mit einer einfachen VB-Klasse in einer allgemeinen Bibliothek (ActiveX-DLL) durchgeführt werden, auf die von jedem Projekt aus verwiesen wird.

Auf diese Weise konvergierte unser Quellcode irgendwann zu einem korrekten Gehäuse, da die IDE beim Auschecken das Gehäuse tatsächlich gemäß dem IUcsVbIntellisenseFix-Gehäuse fixierte. Nun können wir Enummen, Methoden oder Eigenschaften nicht falsch schreiben, selbst wenn wir es versuchen.


Ich habe den Fall in der gesamten Codebase standardisiert, normalerweise unter Verwendung der obigen Beispiele ( Dim CorrectCase ) und Dim CorrectCase Entfernen. Ich löste dann VB aus, um JEDE Datei zu speichern, indem zwischen "End" und "End" eine Groß- / Kleinschreibung gesucht / ersetzt wurde (keine Funktionsänderung, aber genug, um VB zum erneuten Speichern zu bringen). Sobald dies erledigt war, konnte ich den Fall mit einem einzigen Commit standardisieren, wodurch es VIEL einfacher wird, zu einem späteren Zeitpunkt den Überblick zu behalten.


VB ist keine Sprache . VB ist ein Programm, das VBA hostet, genauso wie Office VBA hostet. VB ist eine Reihe von App-Objekten, genau wie Word und Excel, und ein Formularpaket, genau wie in Office.

Sie können also nur VBA-Code in VB schreiben.

PS diese Info ist auf der Registerkarte INFO auf der VB Frage Seite für VB.

Von VBA Info

VBA 6 wurde 1998 ausgeliefert und enthält eine Vielzahl lizenzierter Hosts, darunter Office 2000 - 2010, AutoCAD, PI Processbook und das eigenständige Visual Basic 6.0