Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Eigene MessageBox oder InputBox erstellen





Frage

Ich will eine etwas veränderte Inputbox erstellen. Wie mach ich das? Das ich dafür ein anderes Formular brauche ist mir schon klar. Aber wie werden die Werte übergeben? Soll nämlich wie eine Funktion oder so ähnlich aufgerufen werden! Also: Variable=frmBox("Gib deinen Namen ein: ",3 ...) Und wie werden die Werte in der Box angenommen?

Antwort 1 von Lächerlich

In deiner Visitenkarte trumpft du aber ganz schön auf 8 Sprachen darunter VB und C++ und kannst nicht mal so ne lächerliche Funktion schreiben. Ich würde mich eher etwas demütig geben.

Antwort 2 von misterUE

Wo steht denn, dass ich Visual Basic bzw. C++ supergut kann? Außerdem hättest du mir ja auch antworten können, wenn dies so eine lächerliche Funktion ist!

Antwort 3 von misterUE

Kann das denn wirklich keiner?

Oder ist das echt sooooooo einfach, dass mir keiner helfen will?

Antwort 4 von miranda

Hi misterUE,

würde Dir gerne helfen, da ich mich zur Zeit mal wieder etwas langweile. Allerdings langweile ich mich nicht genug, um hier jetzt auf alle erdenklichen Arten zur Lösung dieses Problems einzugehen, was z.B. die Gestaltung der Inputbox als ActiveX-Steuerelement, oder als kombinierte Inbutbox für eine ganze Reihe unterschiedlicher Datentypen mit möglicherweise gleichzeitiger Eingabe meherer Werte oder Feldelemente angeht.

Deshalb wäre es nett, wenn Du noch kurz was dazu schreiben könntest, was der genaue Sinn dieser Inputbox sein soll.

Hier ein paar Fragen, die dazu beitragen können, die Antwortmöglichkeiten in einem erträglichen Rahmen einzugrenzen:

- Ist eine Weitergabe des fertigen Formulars geplant (ActiveX-Steuerelement) oder willst Du sie nur in dem aktuellen und ggf. weiteren eigenen VB-Projekten verwenden.

- Wird pro Aufruf der Inputbox nur 1 Wert eingegeben, oder soll sie gleich mehrere Eingabefelder enthalten, deren Inhalte beim Drücken von OK zusammen zurückgeliefert werden?
- Wenn es nur 1 Wert pro Aufruf ist, steht der Datentyp dieses Wertes fest, oder kann er von Aufruf zu Aufruf unterschiedlich sein (Integer, Double, String, Variant)?
- Wenn es mehrere Werte (mit evtl. unterschiedlichen Typen) sind, ist dann jedes der Felder pro Aufruf immer vom gleichen Typ?

- Soll der Funktionsaufruf noch weitere Konfigurationsparameter enthalten (wenn ja, welche?) oder gibst Du das Design und sonstige Verhalten der Inputbox fest vor? Dahinter steckt die Frage, ob das Ding universell einsetzbar sein soll, oder nur einem (1) ganz bestimmten Zweck dient.


Diese Fragen sollen nicht dazu führen, daß Du jetzt denkst, ich könne Dir nach Deinen Wünschen die perfekte Inputbox gestalten, sondern dazu dienen, den Antwortaufwand auf deine minimalen Anforderungen einzuschränken.

Leider hat der Rechner, an dem ich gerade sitzt, kein VB installiert - sonst würde ich jetzt mal schnell so ein Ding programmieren, aber auch aus dem Gedächtnis sollte sich Deine Frage hinreichend beantworten lassen (Zur Not gibt es ja in Excel noch VBA :-))

Gruß,
Miranda


Antwort 5 von misterUE

danke und sorry, dass es so lange gedauert hat!


Dieses Formular will ich in mehreren Programmen verwenden!


Es werden mehrere Werte zurückgegeben (z.B. Klick auf einen bestimmten Button(Als Byte), Text in einer Textbox(Als String natürlich), Status einer Checkbox (ist glaube ich standardmäßig Long), ...)
Kann aber auch alles hintereinander in einer String-Variable zurückgegeben werden, das ist egal!


Das Design soll durch weitere Parameter bestimmt werden! Dazu gehören:
die Überschrift
ein anderer Text
eine Zahl vom Typ Long, um mitzuteilen, was für Buttons gezeigt werden sollen
das Gleiche für Auswahlfelder
und nochmal Long für Checkboxen

Allerdings steht schon fest, dass z.B. bei der Zahl 1 dann die Buttons "Ja, Nein, Vielleicht" sichtbar sind und bei der Zahl 2 z.B. "Weiß ich nicht, Vielleicht, Sag ich nicht"!



Das sind jetzt viele Wünsche auf einmal, ich hoffe das schreckt nicht ab!

mfg, Ümit

Antwort 6 von miranda

OK, wie Dir bekannt ist, kann eine Funktion immer nur einen einzigen Wert zurückliefern. Deshalb ist die gleichzeitige Rückgabe mehrerer Werte etwas kompliziert. Den Vorschlag, alles in einen großen String reinzupacken vergessen wir am besten ganz schnell wieder. Dann benötigst Du noch eine extra Funktion in jedem aufrufenden Programm, die diesen String wieder in seine Bestandteile zerlegt. Solche Stringoperationen bereiten am Ende mehr Probleme, als das sie nützen. Es muß eine Menge "Intelligenz" ins Hauptprogramm verlagert werden. So etwas macht man einfach nicht!

Eine andere Möglichkeit wäre, für jeden der möglichen Rückgabewerte einen eigenen Parameter im Funktionsaufruf vorzusehen und diesen im Funktionskopf als "ByRef" zu deklarieren. Damit wird keine Kopie des übergebenen Wertes erzeugt, sondern es wird direkt die Adresse der im Aufruf übergebenen Variable weitergereicht. Wird einer solchen Variable innerhalb der Funktion ein anderer Wert zugewiesen, ist dieser nach der Rückkehr zum aufrufenden Programmteil auch dort vorhanden.

Der Vorteil liegt darin, daß die beim Aufruf der Funktion übergebenen Variablen (feste Werte können nicht an ByRef-Parameter übergeben werden!) bereits mit den Default-Werten gefüllt sein können. Diese werden in der Inputbox als Vorgabe angezeigt und vom Benutzer überschrieben. Nach dem Funktionsende enthalten die gleichen Variablen des Hauptprogramms die neuen Werte. Alle Verarbeitungsschritte erfolgen innerhalb des Moduls Inputbox. Außer dem eigentlichen Aufruf ist im Hauptprogramm nichts anderes zu berücksichtigen. Das ist der große Vorteil dieser Vorgehensweise.
Der Nachteil daran ist aber, daß bei vielen möglichen Rückgabewerten auch entsprechend viele ByRef-Parameter im Funktionsaufruf vorhanden sein müssen (außer den Parametern, die das Design der Inputbox bestimmen).

Ich selbst würde so vorgehen, daß ich in den Aufruf der InputBox möglichst wenige Parameter reinpacke - z.B. nur ein Feld Typ, welches in der Funktion verwendet wird, um zu entscheiden, welche Kombination von Eingabefeldern dargestellt werden soll und ein Feld Buttons, das angibt, welche Bestätigungsbuttons angezeigt werden.
Der Rückgabewert der Funktion ist dann die VB-Konstante des gedrückten Buttons, die angibt, ob die Eingabe erfolgreich war (VBOK) oder vielleicht abgebrochen wurde (VBCancel). Damit kann das aufrufende Programm entscheiden, ob es Werte von der InputBox übernimmt, oder nicht.

Die eigentliche Wertübergabe (hin und zurück) würde ich ähnlich wie bei einem ActiveX-Steuerelement über öffentliche (public) Variable oder Methoden der InputBox durchführen.

Im allgemeinen Teil des ImputBox-Codes gibst Du einige Public-Variablen an:

Public Titel As String
Public SizeX As Integer
Public SizeY As Integer
Public Kommentar As String


Sobald die Form geladen ist, kannst Du dann mit Zuweisungen wie z.B.

frmInputBox.Titel = "BlaBlaBla"
frmInputBox.SizeX = 250
frmInputBox.Kommentar = "Bitte geben Sie hier den Namen und das Alter ein und wählen Sie das Geschlecht der Person"
...

die für das Design der Box entscheidenden Werte zuweisen.

Wenn dann die Input-Funktion aufgerufen wurde, werden zu Beginn erst mal einige in der Form enthaltenen Steuerelemente (z.B. Labels und Defaultwerte in Eingabefeldern) anhand dieser Werte geändert. Erst danach wird die Form mit Me.Show angezeigt.

Die Rückgabewerte werden vor dem Ende der Funktion auf ihre Korrektheit überprüft und in weitere Public-Variablen geschrieben, die dann im Hauptprogramm in der umgekehrten Form abgefragt werden können (Wichtig: Die Form darf dann noch nicht entladen sein! Also nur ein Me.Hide am Ende, aber kein Me.Unload!)

Natürlich kann der Zugriff auf die Variablen der InputBox noch dahingehend abgesichert werden (sollte eigentlich auch gemacht werden), daß die Variablen selbst Private sind und von außen nur mittels Public-Funktionen oder -Prozeduren Werte gesetzt und gelesen werden können.

Bsp:

Private Titel As String
Private StatusCheckBox As Boolean

Public Procedure SetTitel(Wert As String)
Me.Titel=Wert
End Procedure

Public Function GetStatusCheckBox () As Boolean
GetStatusCheckBox = Me.StatusCheckBox
End Function

Gerade in den Set-Funktionen kann es äußerst nützlich sein, den Wert vor der Zuweisung noch auf seine Gültigkeit zu überprüfen.

Wenn das Ganze dann fertig ist, hast Du eine Form frmInputBox, die über eine Reihe von öffenlichen Funktionen, Prozeduren und ggf. Variablen verfügt, die vom Hauptprogramm aus aufgerufen werden können. Die eigentliche InputBox-Funktion ist dann nur eine davon.

Dem Hauptprogramm bleibt es dann überlassen, den Zeitpunkt des Ladens und Entladens dieser Form zu bestimmen, und das Aussehen der Form vielleicht nur ein einziges Mal festzulegen und immer wieder zu verwenden, oder es vor jedem Aufruf neu anzupassen. Die ganze Sache ist dann ordentlich gekapselt und du kannst in jedem neuen Projekt durch einfaches Hinzuladen dieser Datei deren Funktionalität hinzufügen.

Hoffe, ich konnte Dir ein paar hilfreiche Denkanstöße geben.

Schönen Gruß,
Miranda

Antwort 7 von misterUE

Danke für deine Hilfe, werde mal deine Tipps befolgen und melden, was daraus wird. Kann es aber nicht vor Freitag, da der Rechner, vor dem ich jetzt sitze, kein VB hat! :-(

Antwort 8 von misterUE

Hab jetzt die Box gemacht und es funktioniert auch prima!

Danke!!!

mfg, Ümit

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: