VisualBasic UserControl modal anzeigen

second.name

Lieutenant
🎅Rätsel-Elite ’24
Registriert
Sep. 2009
Beiträge
718
Hallo Forum,

im Anhang befindet sich ein Bild, welches ein Form zeigt. (Hier ist das UserControl rot umrandet.)
Mein Problem ist, dass diese modal angezeigt werden müssten - sprich: Bevor auf die anderen Controls des Forms geklickt werden kann, muss das/die UserControls mit OK bestätigt werden, oder sich im "editieren aus" befinden.

...Könnt ihr mir helfen?
 

Anhänge

  • Form.JPG
    Form.JPG
    47,3 KB · Aufrufe: 250
adde dein control zum fenster control ... das wars... und du musst dein usercontrol erst initialisieren. eigentlich kannst du durch den designer dein control einfügen.... such nach der name deine klasse wie dein control so heißt in der Tools Liste... steht meist oben.

und bevor du irgendwas fragst kannst du vorher im internet nach informationen suchen wie man selber lösen kann. wenn du nicht findest kannst du sicher fragen (das nichtfinden liegt daran dass die deutsche übersetzung nicht übertragbar ist, in vielen fällen, zu der englische umsetzung des Objects)
 
Danke für die AW!

Aber wie meinst du das "adde dein control zum fenster control"? ...Könntest du eventuell ein paar Codezilen posten? ...Danke
 
Wahrscheinlich meint er, dass du das Control auf einer Form platzieren sollst, die du modal anzeigst (Showdialog). Anders geht es (zumindest eingebaut) nicht. Den Rand der Form kannst du entfernen (FormBorderStyle=None).
 
...Gibt es eventuell noch einer andere Lösung? ...scheint mir nicht die "feine Englische" zu sein. :-)
 
du könntest alle anderen Controls disablen. "modal" bezieht sich sonst nur auf Formulare (top-level).
 
...Die Idee ein Form zu verwenden find ich sehr interessant. Im Anhang befindets sich ein Bild welches meine Umsetzung zeigt.

Das einzige Problem (auch im Bild zu sehen) ist, dass ich das rote Form in des weiße Panel einsetzten muss und nicht weis, wo ich für das rote Form, die .StartPosition erhalte?
(Die größe für das rote Form übergebe ich im Konstruktor
Code:
Dim rotesForm As New Dialog(Me.SplitContainer1.Panel2.Size)
)

Kann jemand helfen?
Ergänzung ()

...Verzeihung - hier natürlich noch das Bild!
 

Anhänge

  • Forms.JPG
    Forms.JPG
    16,9 KB · Aufrufe: 176
Dim ScreenLocation = panel1.PointToScreen(Point.Empty)

rotesForm bei ScreenLocation anzeigen.
 
nein ich meine es sooo

Code:
MeinUserControl user = new MeinUserControl();
this.Controls.add(user);

//Wenn du dein Control komplett auf dem Form ausweiten willst musste du folgendes schreiben

user.Dock = DockingStyle.Fill; //oder so... musst du halt gucken wie genau das bei dir ist.
 
roker002 schrieb:
nein ich meine es sooo
Das konnte man schwer so verstehen. :) Bei "adde dein control zum fenster control" musste man davon ausgehen, dass ein anderes Fenster gemeint ist, denn im gleichen Fenster hat er es ja schon. Dass das Control "modal" ist, ist ja nur gelöst, wenn es sich um ein anderes, modales Fenster handelt. Aber ich weiß jetzt ja, wie du es meinst; sein Ziel ist dadurch trotzdem nicht erreicht.
 
@WLibero

ich sehe aber am Screenshot was anderes. Kann es vielleicht sein dass der threadersteller nicht unterscheiden kann wie es aussieht wenn man modal freigibt und es aussieht wenn man es zum control fenster irgendwas added?

@ topic... hmm ich glaube man kann die einen UserControl nicht modal anzeigen. zumindest kann dieser kein ShowDialog.

@WLibero
zurück... also muss es sich wirklich um ein hinzufügen von einen Control in den anderen Control handeln.

@vbuser

du willst deinen UserControl als neues Fenster anzeigen lassen oder in dein altes Fenster integriert haben? Das ist jetzt die wichtigste frage!

Wenn es ein neues Fenster sein sollte, dann machst du mit UserControl falsche sachen. Du sollst einen Form Dialog zum projekt hinzufügen.
 
...Jetzt will ich noch schnell Ordnung reinbringen ;-)

Ursprünglich wollte ich tatsächlich ein UserControl modal in einem Panel anzeigen/einfügen.

Nach der ersten Antwort wollte ich also mein UserControl zu dem Panel "adden" musste aber feststellen, dass das arbeiten mit einem Form wesendlich einfacher ist (da ich, wie oben erwähnt, die .SchowDialog-Methode benutzen kann).

Und dazu noch eine kleine Frage: Wenn ich den obigen Code
Code:
Dim ScreenLocation = panel1.PointToScreen(Point.Empty)
verwende (FormX.Loacation = ScreenLocation) ist das Form trotzdem nicht im Panel-Bereich? ...Was mach ich falsch?
Ergänzung ()

...Problem behoben: Man darf nicht im Designer die .StartPosition auf Manuell setzten, sonder zur Laufzeit im Code!

...Aber gleich zum nächten Punkt: Seht euch bitte das letzte Bild an... Ist es möglich, das gesamte Fenster (einschließlich Parent), mit klick in die blaue/aktive Titelleiste zu verschieben?
 

Anhänge

  • Forms.JPG
    Forms.JPG
    16,5 KB · Aufrufe: 136
Zuletzt bearbeitet:
...Aber gleich zum nächten Punkt: Seht euch bitte das letzte Bild an... Ist es möglich, das gesamte Fenster (einschließlich Parent), mit klick in die blaue/aktive Titelleiste zu verschieben?
Ich weiß langsam nicht mehr, was du willst.

- Formen (Klasse "Form") sind top-level Fenster.
A window that has no parent, or whose parent is the desktop window, is called a top-level window.
(Quelle)

Ergo: Du kannt eine Form nicht zum Child eines anderen Fensters oder Controls machen (Ausnahme: MDI Children).

- Usercontrols müssen innerhalb anderer Controls (inkl Formen) platziert werden weil sie keine top-level Fenster sind.

- Nur Formen können modal angezeigt werden.


Es gibt zwei Lösungsmöglichkeiten:
- Du zeigst eine Form modal an der gewünschten Stelle an (Location wie schon gezeigt) und simulierst dadurch, dass sie ein Teil der vorherigen Form ist. Dazu darf sie nicht verschiebbar und die Größe muss fix sein.

- Du fügst das Usercontrol so ein, wie es schon am Anfang war und disablest alle anderen Controls. Erst wenn du im usercontrol auf Ok/Abbrechen geklickt hast, werden die restlchen Controls wieder enabled.
 
WLibero schrieb:
Ergo: Du kannt eine Form nicht zum Child eines anderen Fensters oder Controls machen (Ausnahme: MDI Children).


So ganz stimmt das nicht. Die Windows API bietet Funktionen allgemein jedes Windows als Child eines Fensterelements einzubinden (etwa einen Panel). Allerdings gibt es dabei ein Focus-Problem. Der Focus wird für beide Fenster weiterhin einzeln behandelt.

Die funktion die das ermöglich ist die setParent-funktion in der user32.dll:
http://msdn.microsoft.com/en-us/library/ms633541

Innerhalb von .Net ist das allerdings wirklich nicht vorgesehen. Das bewerstelligen wie mein vorredner schon sagte MDI-Fenster.
 
Zuletzt bearbeitet:
mach es als UserControl ... wenn du genau weiss wo das fenster sein soll, sonst kannst du auch modal machen. Verstehe gerade auch den sinn deines fensters nicht, als was es dienen soll.

Modal sollte sein was du später wegklicken kannst und wo speicherplatz freigegeben wird. naja UserControl kannst du auch auf null setzen wenn du zu dem anderen Control rüberwechselst
 
Kagee schrieb:
So ganz stimmt das nicht.
Doch, das stimmt voll und ganz, denn ich sprach von "Form", nicht von "Fenster". Natürlich ist jede Form ein Fenster, aber "Form" ist ein Begriff aus dem Framework und "Innerhalb von .Net ist das allerdings wirklich nicht vorgesehen" wie du ja selbst schreibst. Will aber nicht weiter Korinthen kacken. :)
 
Ich will noch erklären, was ich machen will:

Ich möchte, dass man über das linke TreeView (siehe erstes Bild) verschiedene UserControls oder Form ;-) im rechten Bereich anzeigen kann! Sobald im rechten Bereich mit der Eingabe begonnen wurde, darf nicht einfach ein anderer TreeView-Knoten angewählt werden, sondern erst die Eingabe beendet oder abgebrochen werden muss.

Wie macht man das am besten?
 
Setz doch einfach während der Eingabe im rechten Bereich: TreeView.Enabled auf false, dann kannst du dir die extra Form und das damit verbundene Gefrickel ersparen.

Sobald die Eingabe getätigt ist, kannst du das TreeView wieder aktivieren (Enabled = true).


In deinem Fall mit ner extra Form rumzuhantieren macht imo wenig Sinn, sondern nur Arbeit.
 
Zuletzt bearbeitet:
Zurück
Oben