Hi Leute,
hab folgendes Problem:
In der Form_load Funktion füge ich der Form ein UserControl hinzu.
Funktioniert auch.
Jetzt will ich das ich beim drücken von F12 das UserControl wieder entferne.
tut sich aber leider nichts.
Hier mal der Quellcode:
private void Form1_Load(object sender, EventArgs e) {
Startseite start = new Startseite(this);
start.Location = new Point(0, 0);
this.Controls.Add(start);
}
Hier der Quellcode zum Entfernen des Controls:
private void Lieferservice_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.F12) {
Console.WriteLine("Taste F12 gedrückt");
Controls.Remove(start);
}
}
Kann das sein, dass es aus diesem Grund nicht geht weil das KeyDown Event von dem Control Startseite kommt und dann nur weitergeleitet wird?
Gruß Manuel
Hi,
verusche es mit start.Dispose()
denn das sollte klappen
mfg
michlG
aus deinem quelltext schließe ich folgendes (da du uns diese informationen vorenthalten hast):
"Form1_Load" ist offensichtlich auf deinr form und erstellt eine istanz von der startseite (warum diese den owner im konstruktor bekommt wenn es eh ein control ist, ist mir schleierhaft...)
"Lieferservice_KeyDown" befindet sich ebenfalls auf der Form1?
(diese informationen sind wichtig... wir kennen deinen quellcode nciht...)
wenn ja, dann dürfte sowieso eine compilerfehlermeldung kommen, da "start" in "Controls.Remove(start);" nicht bekannt sein dürfte.
oder liegt die methode wo anders? im allgemeinen dürfte so eine variable nciht bekannt sein in dem scope..
wo liegt der fokus wenn du F12 drückst?
(auch diese information ist wichtig)
Hallo Manuel,
Kann das sein, dass es aus diesem Grund nicht geht weil das KeyDown Event von dem Control Startseite kommt und dann nur weitergeleitet wird?
Schau Dir mal den Debugger im Visual Studio an, mit dem kannst Du sowas schnell rauskriegen.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Du übergibst hier die Form selbst an das Control, das würde ich nicht machen, glaub nicht das das nötig ist. vermutlich
Startseite start = new Startseite(this);
Das Hier muss wenn du es so lassen willst in deinen Form-code, ich glaub du hast das wohl in die ButtonKlasse geschrieben.
den Keyevent dann bei der form adden.
private void Lieferservice_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.F12) {
Console.WriteLine("Taste F12 gedrückt");
Controls.Remove(start);
//oder falls es in deiner ButtonKlasse stehen soll
//this.Parent.Remove(this);
}
}
dispose() löscht das Element, bleib lieber bei remove. Kannst es dann wieder zurückholen bei Bedarf oder vielleicht reicht auch Visible = false;
*Edit Scheiss Groß- und Kleinschreibung 👅
Hallo msimmerl,
meine Erfahrung hat gezeigt, dass es teilweise Schwierigkeiten bei "OnKeyDown" und der F12 Taste. Probiere testweise einmal eine andere Taste.
Sollte eine andere Taste funktionieren, dann verwende das "OnKeyUp"-Ereignis, das hat bei mir normalerweise funktioniert.
Sollte es trotzdem nicht funktionieren, dann liegt es an Deinem Key-Event-Handling.
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
So als ergänzung zum geschriebenen, wenn du einen Tasten druck auf deiner Form auswerten willst musst du auch die Formulareigenschaft KeyPreview auf true setzen da sonst dein Ereignis nicht ausgewertet wird wenn ein Steuerelement deines Formulars den Fokus hat.
mfg Markus
Hab das mit start geändert diese Methode war nicht bekannt 😦
Jetzt funktionierts einwandfrei.
Vielen dank für die zahlreiche Hilfe.
Gruß
msimmerl