2016-07-17 33 views
1

Ich verwende radiale Anzeigen, um Temperaturen anzuzeigen. Der Benutzer sollte in der Lage sein, jedes Messgerät umzubenennen, was nicht möglich ist, indem man auf den Namen doppelklickt, also muss ich ein Menü erstellen, in dem Benutzer die Namen der Messgeräte ändern können.So schließen Sie TextBox-Menüartikel ordnungsgemäß auf KeyPress

Ich löste das, indem ich einen Menüpunkt für jedes Messgerät machte. Wenn Sie also auf einen Menüpunkt klicken, zum Beispiel "Thermometer 1", erscheint ein Untermenü vom Typ ToolStripTextBox, das denselben Text in einer TextBox enthält. In diesem TextBox kann der Benutzer den Namen ändern. Ich möchte, wenn der Benutzer drücken Sie Geben Sie in TextBox die Textbox Menüelement geschlossen werden, aber die übergeordneten Menüpunkt "Theremometer1" offen bleiben. (Thermometer1, Thermometer2, ... shooul nicht verschwinden, nachdem den Textfeld Menüpunkt zu schließen.)

Hier ist der Code, den ich verwende, dass TextBox Menü schließen:

private void thermometer1ToolStripMenuItem1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == '\r') 
    { 
     thermometer1ToolStripMenuItem1.Visible = false; 
    } 
} 

Aber wie Sie können kleine weißen Balken sehen bleibt sichtbar. Kann mir bitte jemand helfen?

Wie kann ich den Menüpunkt ToolStripTextBox richtig schließen, wenn der Benutzer drückt Geben Sie ein? Dieser kleine weiße Balken sollte nicht sichtbar bleiben.

The Menuitems

The small white bar

+0

_ "Ich möchte, dass, wenn Sie die Eingabetaste drücken, die Textbox verschwindet" _ - genau das passiert, also was ist Ihre Frage? Möchten Sie stattdessen, dass alle Menüs geschlossen werden, oder einige? – CodeCaster

+0

Der weiße Balken ist das Problem – The5thBluesky

+0

sehen, ob die Aktualisierung der 'Form' das Problem behebt oder nicht. 'this.Refresh();' –

Antwort

3

Der richtige Weg, um eine Dropdown

Einstellung Visible des Elements zu schließen ist nicht das, was Sie brauchen. Wenn Sie einen Menüpunkt schließen mögen, dann ist es genug, es ist Eigentümer zu finden, die ToolStripDropDown und rief seine Close Methode ist:

private void someToolStripMenuItem_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Enter) 
    { 
     var item = (ToolStripItem)sender; 
     var owner = (ToolStripDropDown)(item.Owner); 
     owner.Close(); 
    } 
} 

diese Weise werden Sie nicht mit dem kleinen weißen Strich Problem konfrontiert, da Sie die Drop-down schließen. Aber wenn Sie anstatt das Dropdown-Menü zu schließen, setzen Sie das sichtbare Element auf false, das Dropdown ist immer noch offen, enthält kein Element, also wird es als kleiner weißer Balken angezeigt.

Was ist die Small Bar Ausgabe?

Die kleine weiße Leiste, die Sie sehen, ist eine offene ToolStripDropDown, die kein Element wie oben erwähnt enthält.

Dies tritt nur auf, wenn Sie alle Elemente eines Dropdown-Menüs entfernen, während das Dropdown-Menü geöffnet ist. In diesem Fall bleibt das Dropdown geöffnet, enthält keine Elemente. Sobald Sie das Dropdown-Menü schließen, verschwindet es und wird nicht mehr angezeigt, wenn Sie auf das übergeordnete Element zeigen.

Wenn Sie alle Elemente eines geschlossenen Dropdownfensters unsichtbar machen, wird das Dropdown-Menü nicht angezeigt, wenn Sie auf das übergeordnete Element zeigen. Dieses Verhalten ist auch für ein geöffnetes Dropdown gewünscht und das Problem benötigt eine Problemumgehung.

Sie können überprüfen, ob der Eigentümer des Objekts, das Sie unsichtbar gemacht haben, keine anderen sichtbaren Elemente enthält, und es dann auch unsichtbar machen. Der Eigentümer des Artikels ist das Dropdown, das geöffnet bleibt.

+0

Die erste Methode ist die Antwort auf Ihre Frage und sicherlich wird es Thermometer1, Theremometer2 nicht unsichtbar machen. Verwenden Sie einfach einen sauberen Beispielcode und hängen Sie diesen Ereignishandler 'someToolStripMenuItem_KeyPress' nur an den Tastendruck des Menüs an, das das Textfeld enthält. Nach dem Drücken der Eingabetaste in der Textbox wird das Textfeldmenü geschlossen. –

+1

wenn ich einen sauberen Beispielcode mache funktioniert es aber nicht in meinem anderen Code -.- – The5thBluesky

+0

Es bedeutet meine Antwort ist richtig :) Der Zweck dieses Themas ist das Lösen des aktuellen Problems und zeigt Ihnen, wie man ein Menü richtig schließt. Für andere Probleme, stellen Sie neue Fragen und halten Sie diese Frage für ein einzelnes Thema. –

0

Ich denke, Sie müssen den Unterpunkt löschen und nicht sichtbar oder nicht machen. Ich glaube, dass dein Problem mit einem "unsichtbaren" Kind von Thermometer1 zusammenhängt. Versuchen Sie, das untergeordnete Element zu löschen.

+0

aber wenn ich das Kind Element lösche konnte ich den Namen nicht mehr während dieser Laufzeit ändern, kann ich? – The5thBluesky

+0

Nein, das wirst du nicht. Aber auch, wenn es nicht mehr sichtbar ist ... Es ist ein Fehler der Logik so ... –